【发布时间】:2013-01-16 05:43:15
【问题描述】:
基本上我有一个 Task 和一个 Thread 类,我创建的线程数量等于物理内核(或逻辑内核,因为在 Intel CPU 内核上它们是数量的两倍)。
所以基本上线程从任务列表中获取任务并执行它们。但是,我必须确保一切都是安全的,并且多个线程不要尝试一次执行相同的任务,这当然会引入额外的开销(和头痛)。
我将任务功能放在线程中是什么意思?我的意思是 - 不是 4 个线程从 200 个任务池中抓取任务,为什么不是 200 个线程以 4 x 4 为一组执行,基本上我不需要同步任何东西,没有锁定,没有任何东西。当然我不会在整个运行时创建线程,只是在初始化时。
这种方法有什么优点和缺点?我可以忽略的一个问题是 - 因为我只在初始化时创建线程,所以它们的数量是固定的,而对于任务,我可以继续在任务池中转储更多任务。
【问题讨论】:
-
如何只运行四个线程?您确定需要以某种方式同步此操作吗?
-
看起来你在生产者-消费者队列之后。这里有一些很好的阅读:1024cores.net/home/lock-free-algorithms/queues
标签: c++ multithreading thread-safety threadpool