Multithreading 线程同步

Multithreading 线程同步,multithreading,pthreads,Multithreading,Pthreads,我有一个.cpp文件,其中除了main()之外,还定义了另外两个函数-func1和func2。func2是以以下方式调用的线程的函数 void func1() { //code here pthread_create(&thread1, NULL, func2, (void*)arg); } 因此,在退出函数之前,func1调用func2。现在,我想要的是,一旦func2退出,func1就会被自动调用。请注意,要实现这一点,我不能简单地在func2末

我有一个.cpp文件,其中除了main()之外,还定义了另外两个函数-func1和func2。func2是以以下方式调用的线程的函数

  void func1()
  {
       //code here

    pthread_create(&thread1, NULL, func2, (void*)arg);
  }

因此,在退出函数之前,func1调用func2。现在,我想要的是,一旦func2退出,func1就会被自动调用。请注意,要实现这一点,我不能简单地在func2末尾调用func1,因为这意味着在func2退出之前调用func1。此外,我不能使用在线程退出之前调用的处理程序(通过使用pthread_cleanup_push),然后在该处理程序中调用func1,因为该处理程序将在线程之前执行(即func2)终止。

为什么不能编写一个func3,首先调用func2,然后再调用func2\u exit\u处理程序,并将该func3用作线程函数而不是func2?@bobah…解决方案中有一个问题…func1将调用func3线程,然后在该func3中,func2\u exit\u处理程序将再次调用func1…因此,func1将在func3完成之前被调用,因此func1将再次调用func3,这将创建越来越多的线程。在短时间内,您将有两个线程,仅此而已。如果您只需要一个“看门狗”功能来确保func2在专用线程中始终处于活动状态,那么只需将其包装成一个带有无尽while循环的函数,然后尝试在内部捕获即可。