为了消除浪费唤醒信号的问题, Dijkstra提出了一种方法, 该方法涉及存储所有唤醒呼叫。 Dijkstra指出, 生产者可以将唤醒呼叫存储在变量中, 而不是直接将唤醒呼叫传递给消费者。任何需要阅读的消费者都可以阅读。
信号量是存储从生产者转移到消费者的整个唤醒呼叫的变量。它是一个变量, 在内核模式下会自动进行读取, 修改和更新。
信号量无法在用户模式下实现, 因为当两个或多个进程尝试同时访问变量时, 竞争条件总是会出现。它始终需要操作系统的支持才能实现。
根据情况的需求, 信号量可以分为两类。
- 计数信号量
- 二进制信号量或互斥量
我们将详细讨论每个。
评论前必须登录!
注册