我會先介紹一些代碼,因爲解釋更容易。假設互斥正確使用條件變量來保持它的簡單: // Thread 1
while(1)
{
conditionVariable.wait();
// Do some work
}
// Thread 2
while(1)
{
// Do some work
conditionVariable.notify_one
我有方法a,它在一些隨機時間重複調用,這會觸發方法b,它會在一些隨機時間之後完全執行並且位於它自己的線程中。我想確保後續執行a等到b完成,這是由當前執行a觸發的。換句話說,a和b將交替執行。我試圖做到這一點使用互斥和條件變量如下: def a
Thread.new do
$mutex.synchronize do
puts "a"
b
$cv
我有以下計時代碼,它似乎沒有等待條件變量根據需要。目標是產生所有線程,然後讓他們同時開始工作。 過早似乎被稱爲。任何想法爲什麼? chrono::milliseconds timeNThreadsLockFree(int n, int worksize)
{
boost::lockfree::stack<int> data(totalNumberOfWorkItems);
v