();
latch.lock(); finished_cv.notify_one(); } } }}
…
////主要应用:
void jobfn(){ //做一些 轻量级 </跨度> 计算 </跨度> }
void main(){ //测试 1000来电 轻量级 </跨度> 来自线程池的jobfn for(int q = 0; q&lt; 1000; q ++) { threadPool-&GT; addJob(安培; jobfn); threadPool-&GT; waitForJobToFinish(); }}
所以
你的“猜测”是正确的;这只是一个资源争用问题。
你的10个线程没有空闲,他们正在等待。这意味着操作系统必须迭代应用程序的当前活动线程,这意味着可能发生上下文切换。
活动线程被推回,一个“等待”线程被拉到前面,其中代码检查信号是否已被通知并且可以获取锁,因为它可能不能在该线程的时间片中,它继续迭代剩下的线程,每个线程都试图查看是否可以获取锁,但是它不能,因为你的“活动”线程尚未分配完成时间片。
单线程池没有此问题,因为在OS级别不需要迭代其他线程;如果被授予,单线程池仍然比调用更慢 job 1000次
job
希望能有所帮助。