问题描述
- 关于线程释放资源以后信号量的变化的问题
-
线程访问资源时首先获取信号量将信号量的值减一
如果信号量的值小于0,则进入等待状态,否则继续执行。
访问完资源以后,线程释放信号量,进行如下操作:
将信号量的值加一
如果信号量的值小于1,唤醒一个等待中的线程。
我就很奇怪最后一句,怎么会是唤醒一个等待中的线程?信号量的值都已经小于1了,这说明已经没有信号量了,那为啥还要唤醒信号量呢?
解决方案
信号量小于1,但是如果等于0,就表示现在可以让一个线程进入访问资源, 所以就唤醒一个等待线程
解决方案二:
线程可以访问资源,那应该是信号量大于0才对,如果一个线程试图访问资源,信号量减一后变成了小于0不就必须要等待了吗?
显然你没有回答准确。
时间: 2024-10-29 21:17:58