好的,各位观众老爷们,今天咱们来聊聊 C++20 引入的 std::counting_semaphore,这玩意儿可不是你奶奶用的缝纫机,它是一个线程同步的利器,让你在多线程的世界里游刃有余。 什么是信号量? 首先,我们要搞清楚什么是信号量。你可以把它想象成一个停车场管理员,他手里拿着一定数量的停车位钥匙。 acquire() (停车): 线程想停车(访问共享资源)的时候,就向管理员要一把钥匙,如果管理员手里还有钥匙,就给它一把,线程就可以停车了。如果管理员手里没钥匙了,线程就只能乖乖等待,直到有车开走(释放钥匙)。 release() (还车): 线程停完车(使用完共享资源)后,就把钥匙还给管理员,这样其他等待的线程就可以拿到钥匙停车了。 std::counting_semaphore 就是这个停车场管理员,它管理着一个计数器,这个计数器就代表着可用的资源数量。 std::counting_semaphore 的基本用法 std::counting_semaphore 有两个主要的成员函数: acquire(): 减少计数器,如果计数器为 0,则阻塞当前线程,直到计数器大于 0。 r …