【问题标题】:pthread threadpool scenariopthread 线程池场景
【发布时间】:2011-10-24 11:58:23
【问题描述】:

我想使用 pthreads 实现以下场景: 线程池中有两种线程。第一种执行(比如说)fun1,第二种执行 fun2。主线程启动这两个线程(为简单起见,假设池中只有两个工作线程,上述两种不同类型中的每一种)。然后主线程等待其中一个线程完成。第一个完成的线程通知主线程,然后主线程应该通知另一个工作线程退出执行其工作。并且循环继续。

现在,如果我想阻止线程执行其工作,这可能类似于 memmove/lock 获取,那么我认为最好杀死/取消该线程并重新创建它。大家觉得呢?

此外,如果我取消线程 (pthread_cancel),那么似乎我将不得不调用 pthread_join 以确保它实际上已被取消,然后重新创建它。这是真的吗?

谢谢, 尼勒什。

【问题讨论】:

    标签: c pthreads threadpool


    【解决方案1】:

    没有用 pthreads 杀死线程这样的事情。正如您所发现的,存在取消,但它是否对取消起作用取决于线程。只有在 (1) 它没有被 pthread_setcancelstate(PTHREAD_CANCEL_DISABLE); 阻塞并且 (2) 线程调用一个作为取消点的函数时,才会执行取消操作。

    您需要使用某种同步操作来确保取消已被执行也是正确的。一种方法是在线程上调用pthread_join,但如果程序中的另一个点可能已经在其上调用pthread_join(调用pthread_join 两次调用UB!),这可能会出现问题。在这种情况下,您可以安装一个取消清理处理程序,该处理程序在运行时发布到信号量或发出条件变量信号,然后以这种方式等待通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2012-04-19
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多