C++ 如何在C++;?
场景: 两个线程执行从功能栏内部调用的函数foo,但一次只有一个线程执行foo。比如说T1和T2 T1在未知时间开始。它可以在T2开始之前或之后 T2用force restart参数调用。如果设置了此参数,则应导致现有任务(T1)退役,等待其退役,然后继续执行 线程将自身添加到全局STL列表中,以确保一次只能运行一个foo函数 我们如何诱导退休? 非常简单的全局失效布尔标志,foo仅为2个嵌套FOR循环。所以在某个时候它会遇到这张支票。如果(退出)转到退出;然后线程将从foo中出来并关闭C++ 如何在C++;?,c++,multithreading,C++,Multithreading,场景: 两个线程执行从功能栏内部调用的函数foo,但一次只有一个线程执行foo。比如说T1和T2 T1在未知时间开始。它可以在T2开始之前或之后 T2用force restart参数调用。如果设置了此参数,则应导致现有任务(T1)退役,等待其退役,然后继续执行 线程将自身添加到全局STL列表中,以确保一次只能运行一个foo函数 我们如何诱导退休? 非常简单的全局失效布尔标志,foo仅为2个嵌套FOR循环。所以在某个时候它会遇到这张支票。如果(退出)转到退出;然后线程将从foo中出来并关闭 //A
//All globals are guarded by locks and assignments are done via interlock
//exchange. I am trying to solve the notification problem described
//below. This is just a pseudo code.
bar(bool forcerestart)
{
...
if(forcerestart && other_task_running_bar)
g_forcerestart = 1;
//some logic to handle retire of other thread.
foo()
...
}
foo()
{
for()
for()
if(g_forcerestart)
goto exit;
exit:
g_forcerestart = 0;
}
问题:
如何使T2(通过强制重启调用)等待T1退出
第一个解决方案:while(退休) 答:C++11条件变量中的谓词参数为什么当你问C++时,为什么要记住C++?值是通过值复制的,所以在更新源变量时,参数不会被更新。你必须通过引用显式传递。在C++中编写线程代码需要对细节的极度关注。你在这里做了很多关于事情如何运作的疯狂假设,并表明你需要在这里阅读更多的基本知识。对于编写有效的C++多线程代码,你有什么好的参考吗?我不知道问题是什么。旗帜很好。把它想象成“爸爸需要家用汽车”的紧急情况。如果车钥匙在架子上,那么没问题,就把车拿走。如果没有,那么:1)你确保当汽车最终回来时,下一个轮到你了,然后2)发短信给每个人,告诉他们你正在做的紧急事情有一个停车点,不管谁有车,都需要尽快把汽车带回来,然后3)你等待汽车回来。一旦钥匙出现在钥匙架上,您就取下钥匙,取消紧急状态声明,然后出发。不相关的,而不是
goto
将嵌套的for
循环放置在另一个函数中,并替换goto exit代码>带有普通的旧返回代码>。易于阅读,更少令人讨厌的惊喜。