我正在Linux上進行多線程C++ boost。boost :: mutex無法避免C++程序中的競爭條件?
即使我嘗試使用鎖,以下程序仍然存在競態條件。
結果是8或9或5。它不應該發生。
#include <iostream>
#include <boost/bind.hpp>
#include <boost/threadpool.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread.hpp>
boost::mutex myMutex ;
int g = 0 ;
void f()
{
//myMutex.lock();
{
boost::mutex::scoped_lock lock(myMutex);
++g;
}
//myMutex.unlock();
return ;
}
const int threadnum = 10;
int main()
{
boost::threadpool::fifo_pool tp(threadnum);
for (int i = 0 ; i < threadnum ; ++i)
tp.schedule(boost::bind(f));
std::cout << g << std::endl ;
return 0 ;
}
任何幫助將不勝感激。
謝謝!
不應該等待線程停止嗎? – mfontanini
唯一可以防止競爭條件或死鎖的是**正確的設計**。沒有銀彈。 –
我還會補充說,在主返回之前,任務**確實已經完成了**:它是超出範圍之前完成所有任務並且可以更改的默認關閉策略。只是他們沒有完成...... std :: cout ...執行。 –