簡體   English   中英

C ++-線程同步

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM