我有这个问题
Foo * foo = new Foo();
void A(){
foo->a();
}
void B(){
foo->b();
}
void C(){
foo->reloadAll();
}
一旦我输入方法C并开始重新加载foo,我不想调用A或B.但是,A或B可以一起调用。在那种情况下,我不想锁定任何线程。
如何同步?我可以使用C ++ 14提供的功能。目前,我正在使用原子变量进行主动等待(而loo with sleep),但这并不理想。
编辑:在线程中调用A,B或C是由GUI(用其他语言编写)驱动的,所以我在C ++应用程序中没有真正的线程。答案 0 :(得分:4)
看起来像是读者 - 作家的问题。 A和B需要作为读者锁定,C作为作者。看这里:Reader/Writer Locks in C++
答案 1 :(得分:3)
我认为最佳选项是shared_mutex,方法C应该使用唯一锁,但A和B使用共享锁,检查它是否可用。
如果C被锁定,你可以使用try_lock_shared从A和B返回,而不是等待。
答案 2 :(得分:0)
如何使用两个unique locks,一个用于a,一个用于b。当a / b启动时锁定,当a / b结束时分别解锁,c锁定/解锁两者?