2013-02-26 74 views
0

我有一個程序使用此代碼:更換的boost ::互斥

mutable boost::condition_variable cvRun; 

void CAteEngineInternal::RunSync() 
{ 
    boost::mutex m; 
    boost::unique_lock<boost::mutex> lock(m); 
    Run(); 
    //wait for run to complete 
    cvRun.wait(lock); 
} 

int CAteEngineInternal::RunXSync(int FramesToRun) 
{ 
    boost::mutex m; 
    boost::unique_lock<boost::mutex> lock(m); 
    int retVal = RunX(FramesToRun); 
    //wait for run to complete 
    cvRun.wait(lock); 
    return retVal; 
} 


void CAteEngineInternal::OnRunCompleted(int /* status */) 
{ 
    cvRun.notify_all(); 
} 

我和CLI工作,我發現了以下錯誤:
basic_timed_mutex.hpp(216):致命錯誤C1001 :編譯器發生內部錯誤

我想替換這個boost :: mutex代碼,並找到一種方法來克服這個編譯器錯誤。我在VS2010上使用VS2012和C++上的C#開始使用。 CLI也在VS2010上。

有什麼建議使用什麼?我需要它是跨平臺的,並且能夠在VS2010中進行編譯。

+0

STL沒有併發編程庫。 C++標準庫在C++ 11之前都沒有。 – juanchopanza 2013-02-26 12:29:59

+1

您使用的是最新版本的Boost? – 2013-02-26 12:38:22

+0

你正在使用哪種版本的boost? – 2013-02-26 12:39:54

回答

4

偏離主題,但請注意,您並未正確地等待條件變量:您應該將狀態(此例中爲布爾值)與它關聯並等待循環。否則,您的代碼可能會錯過狀態通知並永久掛起,或者收到虛假喚醒並過早完成等待。請參閱http://www.boost.org/doc/libs/1_53_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref

+1

而且你應該使用一個共同的互斥體進行同步... – 2013-02-26 13:41:30

+0

謝謝我會解決它。 – Gilad 2013-02-26 14:04:07