对于Thread Pool代码里的一个疑问?

没仔细看代码,但lambda值捕捉this是C++17的事,所以这里的mutex都是同一个锁。不太确定你说的是什么情况,但是线程池本来就只是线程分配阶段串行,而各线程是并行的,所以自然会有多个线程“依次”获得锁。代码里用了条件变量,cv在wait的时候是会释放锁的。
■网友
第二个问题:是同一个,也不可能有2个不同的。。
【对于Thread Pool代码里的一个疑问?】 第一个问题:其实不知道你问什么,“为什么初始化的4个线程都能跨过这个临界区?“,你是问为什么他们unlock了这个mutex,以至于后面enqueuer task的时候没有任何问题吗?
因为condition_variable本身啊,condition_variable.wait,会先查后面的条件满足不,如果不满足(task queue为空),就unlock mutex,然后休眠。下次起来的时候,会先尝试lock,然后再查一下后面的条件满足不?以此类推。

■网友
是 下一题


    推荐阅读