};可以看作是2把鎖,初始時都上鎖,printfirst在任何時候可執行。執行結束後開鎖1
printsecond只有在鎖1開鎖後才可以執行,執行時鎖鎖1,執行結束後開鎖2,自動開鎖1
printthird只有在鎖2開鎖後,鎖1開鎖後才可以執行,執行時鎖鎖1和2,執行結束後自動開鎖1和2. 注意這裡上鎖不可以先1後2,可能發生死鎖。
或者
class foo
void first(functionprintfirst)
void second(functionprintsecond)
void third(functionprintthird)
private:
std::mutex mu1,mu2;
};
第二個更好點
class foo
void first(functionprintfirst)
void second(functionprintsecond) );
// printsecond() outputs "second". do not change or remove this line.
printsecond();
counter+=1;
cond2.notify_one();
}void third(functionprintthird) );
// printthird() outputs "third". do not change or remove this line.
printthird();
}private:
std::mutex mu;
std::condition_variable cond1;
std::condition_variable cond2;
int counter=1;
};
wait的第二個引數是乙個lambda函式
};注意有乙個bool值。
//奇數
if(i%2)
else
cv_even.notify_one();
bzero=false;}}
void even(functionprintnumber) );
printnumber(i);
bzero=true;
bodd=true;
cv_zero.notify_one();}}
void odd(functionprintnumber) );
printnumber(i);
bzero=true;
bodd=false;
cv_zero.notify_one();}}
};注意那2個布林值。
多執行緒程式設計leetcode
input 1 2,3 output onetwothree input 1 3,2 output onethreetwo class foo04 public void first runnable printfirst throws interruptedexception public voi...
多執行緒程式設計
1 多執行緒的基本思路不是在介面執行緒執行費時的 而是專門啟動乙個執行緒 稱作工作執行緒 來完成,介面執行緒只負責介面的 顯示 和操作,而工作執行緒只負責耗時的操作過程。2 對於普通的win32應用程式來說,執行緒可以分為兩種 介面 ui user inte ce 執行緒和工作執行緒。介面執行緒一般...
多執行緒程式設計
如何編寫執行緒安全的dll 在我的工作中經常會編寫dll,這些dll有個共同的特點就是都有乙個初始化函式,乙個資源釋放函式,其他幾個函式都是核心功能函式。而且這些dll有時會被多個程序同時呼叫,這就牽扯到多程序的多執行緒呼叫dll的問題。有點繞口,以下我根據我實踐中遇到的問題,分四種情況分享一下我解...