wait()和sign()如果不是原子执行的后果
如果wait()和signal()信号量操作不是原子执行的,则可能违反互斥
在wait()
函数中,首先需要判断该进程所需的所有资源是否都已经空闲
- 如果存在不空闲的资源的话,则该进程进入第一个不空闲的资源的等待队列,直到该资源空闲时才被唤醒
- 如果所有资源都空闲的话,则该在
wait()
函数中将该进程所需的所有资源都分配给该进程
当wait()
和signal()
函数不是原子地执行的时候,会出现一种情况即两个进程共同需要的资源只有一个,并且这两个进程其他所有资源都空闲,这时候会导致两个进程都会被唤醒,然后在wait()
函数中对这一个资源执行两次减一操作,即将一个资源进行重复分配,从而违反了互斥规则