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