【问题标题】:Is there a way to ‘join’ (block) in POSIX threads, without exiting the joinee?有没有办法在 POSIX 线程中“加入”(阻塞)而不退出加入者?
【发布时间】:2010-05-01 23:40:55
【问题描述】:

我沉浸在多线程/并行文档中,试图弄清楚如何用我一直在设计的编程语言来实现线程。

我正在尝试将心智模型映射到 pthreads.h 库,但我遇到了一件麻烦事:我的解释器实例在完成对 routine(语言的闭包/函数数据类型),因为我想稍后将 other routines 分配给它们进行解释,从而节省了我的线程和解释器设置/拆卸时间。

这很好,除了pthread_join(3) 要求我调用pthread_exit(3) 来“解除阻塞”原始线程。如何阻塞原始线程(当它需要执行routine的结果时),然后在子例程解释完成时解除阻塞?

【问题讨论】:

    标签: c multithreading posix pthreads blocking


    【解决方案1】:

    使用pthread_cond_t;在一个线程上等待它并在另一个线程中发出信号或广播它。

    【讨论】:

    • 在这种情况下,一个信号量可能就足够了——初始化值为 0,在一个线程中等待它,然后在另一个线程中发布。不过,原理相同。
    • 当你说“等待它”时,你的意思是在原始线程中简单地对它进行一个紧密的循环吗?那是……好吧,我试图避免这种笨拙/蹩脚的解决方案。如果可以的话,我想使用pthread.h 库来实际冻结线程,这样它甚至都不会被安排:这应该会节省大量的执行时间,不是吗?
    • @elliotcable:我指的是 pthread_cond_wait:opengroup.org/onlinepubs/007908799/xsh/pthread_cond_wait.html
    • @Steve Jessop:信号量可能同样有效并且更简单,但在技术上不是 pthread 的一部分 :)
    • 你也可以考虑使用障碍。
    【解决方案2】:

    听起来您实际上想要实现Thread Pool Pattern。它提供了一个相当简单的概念模型,无需重复创建线程和降低成本。有些操作系统直接支持它,而在其他操作系统上,使用队列和信号量来实现应该相当简单。

    【讨论】:

    • 是的,差不多。我只是在寻找合适的 pthread.h 调用,或者我需要调查的任何其他内容来创建它。
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2020-12-11
    • 2022-08-24
    • 2013-02-01
    相关资源
    最近更新 更多