【发布时间】:2017-12-27 09:12:32
【问题描述】:
我有这个问题
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 和睡眠),但这并不理想。
编辑:在线程中调用 A、B 或 C 由 GUI(用其他语言编写)驱动,因此我在 C++ 应用程序中没有真正的线程。
【问题讨论】:
-
C 调用时如果 A 或 B 已经执行了怎么办?
-
@Jeka 如果 A 或 B 正在执行,请等待它们完成调用 C。
-
您可以考虑使用
std::shared_mutex并为A和B调用lock_shared() -
你确定你有一个多线程问题吗?几乎所有的 GUI 框架都只在 1 个线程中运行。
-
@nos 是的。 UI 在后台使用线程来调用方法和非阻塞 UI。
标签: c++ multithreading c++11 c++14