[英]C++ - synchronization of threads
我有這個問題
Foo * foo = new Foo();
void A(){
foo->a();
}
void B(){
foo->b();
}
void C(){
foo->reloadAll();
}
一旦我進入方法C並開始重新加載foo,我就不想調用A或B。但是,可以一起調用A或B。 在那種情況下,我不想鎖定任何線程。
如何同步呢? 我可以使用C ++ 14提供的功能。 當前,我在原子變量上使用主動等待(當您進入睡眠狀態時),但這並不理想。
編輯:在線程中調用A,B或C由GUI(用其他語言編寫)驅動,所以我在C ++應用程序中沒有真正的線程。
看起來像是讀者-作家的問題。 A和B需要鎖定為讀者,C需要鎖定為作家。 看這里: C ++中的讀/寫器鎖
我認為最好的選擇是shared_mutex ,方法C應該使用唯一鎖,但是A和B使用共享鎖,請檢查它是否對您有用。
如果C被鎖定,您也可以使用try_lock_shared從A和B返回,而不是等待。
怎樣使用兩個唯一的鎖 ,一個用於a,一個用於b。 a / b開始時分別鎖定,a / b結束時分別解鎖,c都鎖定/解鎖?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.