我想写一个自定义的线程池适合我的目的使用pthreads,我是新的pthreads。我阅读这些(POSIX threads programming和Linux Tutorial Posix Threads)在线教程,他们是相当有帮助,但我仍然有关于互斥体和条件变量的一些(也许愚蠢的)疑惑:正确的线程池使用pthreads
- 什么是互斥的范围是什么?全局互斥锁是否会锁定所有全局变量,以便一次只有一个线程可以访问它们?如果我有两个全局互斥锁,他们会锁定同一组变量吗?如何在类或函数中声明互斥锁,当我锁定/解锁它时会发生什么?
- 如果我只是计划只读一个全局变量,而不是修改它,我还应该使用互斥锁吗?
- 如果我是正确的,则在某些条件下,使用条件变量唤醒正在睡眠(或使用
pthread_cond_wait()
进行阻止)的其他线程。唤醒睡眠线程的电话由pthread_cond_signal()
或pthread_cond_broadcast()
从其他某个线程给出。控制流程应该如何发生,以便某些全部或一个线程唤醒以开始工作并等待下一个工作可用?我特别感兴趣的是有4个线程的场景。 - 有没有一种方法可以在创建线程之前设置特定处理器核心的线程亲和性(以便它可以在所需的核心上开始执行,并且在创建后不会发生核心转换)?
如果问题看起来很愚蠢,我很抱歉,但正如我所说,我是新手。任何帮助,意见,代码或指向良好的资源表示赞赏。在此先感谢您的帮助。
感谢您的回答,特别是(1b),我有这种误解。 :) – Chatter
如果你像其他人一样,它将是第一个。在你将头部缠绕在大部分面前之前,需要一些思考,练习和错误,即使这样很容易得到蛇的位置。 – Duck