【发布时间】:2019-07-30 22:31:35
【问题描述】:
我有一个运行多个线程的 C++ 程序。我正在使用全局标志来告诉我什么时候可以继续我的程序。这需要使用等待设置标志的 while 循环。我知道这种方法不是最好的,因为程序运行的时间比预期的要长得多。
我已经看到了互斥体和条件变量的使用,但我不确定它是否适用于我的需求或如何实现。
volatile bool flag;
int threadFunction(){
//Do some initialization work
//
//Then look for flag to be set
while (1){
if (flag){
//do stuff
flag = false;
}
Sleep(1);
}
}
int setFlag(){
flag = true;
}
int main(){
std::thread thread1(threadFunction);
while (1){
setFlag();
Sleep(5);
}
thread1.join()
}
threadFunction 中的 while 循环似乎导致了速度问题。有没有更好的方法来做到这一点?
没有错误,但代码似乎效率很低。
【问题讨论】:
-
与您的问题没有任何关系,但几乎总是
if (flag) { do_stuff(); flag = false; }是错误的。更好的是if (flag) { flag = false; do_stuff(); }
标签: c++ windows multithreading