【发布时间】:2012-06-16 14:35:40
【问题描述】:
我正在尝试使用 pthreads 编写适合我目的的自定义线程池,而且我是 pthreads 的新手。我在线阅读了这些(POSIX threads programming 和 Linux Tutorial Posix Threads)教程,它们很有帮助,但我仍然对互斥锁和条件变量有一些(可能是愚蠢的)疑问:
- 互斥锁的范围是什么?全局互斥锁是否会锁定所有全局变量,以便一次只有一个线程可以访问它们?如果我有两个全局互斥锁,它们会锁定同一组变量吗?那么在类或函数中声明的互斥体呢,当我锁定/解锁它时会发生什么?
- 如果我只是打算读取一个全局变量,根本不修改它,我还应该使用互斥锁吗?
- 如果我是正确的,条件变量用于在某些条件下唤醒其他正在休眠(或使用
pthread_cond_wait()阻塞)的线程。对休眠线程的唤醒呼叫由来自其他线程的pthread_cond_signal()或pthread_cond_broadcast()给出。控制流应该如何发生,以便一些全部或一个线程唤醒以完成工作并等待下一个工作可用?我对 4 个线程的场景特别感兴趣。 - 有没有办法在创建线程之前设置线程与特定处理器内核的亲和性(以便它开始在所需内核上执行,并且在创建后不会发生内核移动)?
如果这些问题看起来很愚蠢,我很抱歉,但正如我所说,我是新手。感谢任何帮助、cmets、代码或指向良好资源的指针。提前感谢您的帮助。
【问题讨论】:
标签: pthreads threadpool mutex condition-variable