AQS之semaphone

xiaoxiao2021-02-28  85

void acquire() 

从此信号量获取一个许可,在提供一个许可前一直将线程阻塞

acquire方法总结如下:

1、尝试在非公平模式下获取一个许可,或者叫做锁。如果获取到则立即返回并将许可计数器减一,如果没有获取到,则进行2

2、进入到AQS队列自旋等待,当此节点的前驱是头结点后,又开始尝试获取锁。直至成功获取或中断取消。

以上就是关于acquire()的内部实现过程。

release()方法:释放一个许可

释放一个许可到Semaphore对象中,释放一个许可,将可用许可的数量加1.

当一个线程尝试这取释放一个许可,那么就选择另外一个线程(可重入)来获取这个许可

参考文章 https://blog.csdn.net/u010412719/article/details/52104409

https://blog.csdn.net/shihuacai/article/details/8856526

http://ifeve.com/concurrency-semaphore/#more-14753

转载请注明原文地址: https://www.6miu.com/read-2614755.html

最新回复(0)