C++ 如何在C++;?

C++ 如何在C++;?,c++,multithreading,C++,Multithreading,场景: 两个线程执行从功能栏内部调用的函数foo,但一次只有一个线程执行foo。比如说T1和T2 T1在未知时间开始。它可以在T2开始之前或之后 T2用force restart参数调用。如果设置了此参数,则应导致现有任务(T1)退役,等待其退役,然后继续执行 线程将自身添加到全局STL列表中,以确保一次只能运行一个foo函数 我们如何诱导退休? 非常简单的全局失效布尔标志,foo仅为2个嵌套FOR循环。所以在某个时候它会遇到这张支票。如果(退出)转到退出;然后线程将从foo中出来并关闭 //A

场景:

两个线程执行从功能栏内部调用的函数foo,但一次只有一个线程执行foo。比如说T1和T2

T1在未知时间开始。它可以在T2开始之前或之后

T2用force restart参数调用。如果设置了此参数,则应导致现有任务(T1)退役,等待其退役,然后继续执行

线程将自身添加到全局STL列表中,以确保一次只能运行一个foo函数

我们如何诱导退休?

非常简单的全局失效布尔标志,foo仅为2个嵌套FOR循环。所以在某个时候它会遇到这张支票。如果(退出)转到退出;然后线程将从foo中出来并关闭

//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条件变量中的谓词参数goto将嵌套的
for
循环放置在另一个函数中,并替换
goto exit带有普通的旧
返回。易于阅读,更少令人讨厌的惊喜。