【发布时间】:2011-04-02 03:29:05
【问题描述】:
我有一个简单的线程池,用 pthreads 编写,使用锁池实现,所以我知道哪些线程可用。每个线程还有一个它等待的条件变量,所以我可以发信号通知它工作。
当工作开始时,我通过从锁池中查找可用线程来选择一个线程。然后,我设置了一个与线程关联的数据结构,其中包含它需要做的工作,并在条件变量上发出信号表明线程应该开始工作。
问题是线程何时完成工作。我需要解锁锁池中的线程,以便它可以用于更多工作。但是,控制线程是设置锁的线程,所以线程不能自己释放这个锁。 (并且控制线程不知道工作何时完成。)
有什么建议吗?
我可以重新构建我的线程池以使用一个队列,在该队列中,当添加工作时所有线程都会发出信号,以便一个线程可以抓取它。但是,在未来,线程亲和性可能会成为传入工作的问题,而锁池使这更容易实现。
【问题讨论】:
-
使用 pthreads API 可以确定特定线程的运行状态,例如线程是否完成了它的工作?
标签: locking pthreads mutex threadpool