APP下载

Semaphore的使用

消息来源:baojiabao.com 作者: 发布时间:2026-05-18

报价宝综合消息Semaphore的使用

Semaphore的作用是控制执行绪的并发数量。在简单点的解释就是如果我们开始了10个执行绪都在处理任务,如果我们用到的Semaphore,那么可以让这10个并发任务执行的时候可以只同时执行2个。因为Semaphore的构造方法里需要传递一个int型别的引数,这个引数就是控制执行绪可以允许的同时并发数。

上述程式码我们同时开启了3个执行绪,因为我们没有加同步方法所以这3个开启的执行绪是异步执行的。那么在实际的任务开发中,如果我们需要控制多执行绪的并发数量应该怎么办呢?例如我们在操作IO的时候可能会因为系统的内存或者磁盘等因素,导致我们的CPU占有率很高,这时我们就要调整执行绪的同时并发数,否则系统可能会卡死。这时我们就会用到Semaphore。它的使用方法也比较简单,当呼叫acquire()方法时,就是会获取由Semaphore颁发的许可证,当呼叫release()方法时就会把获取的许可证归还。Semaphore中的许可证数量是由建立Semaphore物件的构造方法的引数决定的。引数值是多少,就有多少个许可证,有多少个许可证,就可以同时有多少个执行绪并发执行,因为没有获得许可证的执行绪则不会执行。

我们看输出虽然我们开启了3个执行绪,但同时执行的执行绪任务只有2个,原因就是我们设定的Semaphore建构函式的引数为2。也就是说同时执行的任务只能是2个,如果有一个执行绪的任务已经执行完了,那么另一个执行绪才会执行。原因是上一个执行绪已经将许可证归还了,当前执行绪可以重新获取到许可证了。

2020-01-06 23:50:00

相关文章