谁能告诉我什么是信号量? 计算信号量有什么好处? 你能为c中的计数信号量编写一个代码片段吗?
答案 0 :(得分:0)
如果您有N个可用资源,计数信号量可以跟踪 剩余资源数量。当任何线程访问信号量的信号量计数器之一时 将减少1,当线程释放信号量时,计数器将增加1。 如果计数器达到零并且线程请求资源,则线程将被阻止 直到另一个线程释放信号量。 信号量的一个众所周知的应用是生产者 - 消费者。 您可以在此处找到有关生产者消费者问题的详细说明:https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem 它还包括您寻找的简单代码。
还可以初始化信号量以限制它控制的最大资源数量。 如果我们将其限制为1,则称为二进制信号量,它只有两个状态sema = 1或sema = 0 二进制和计数信号量在这里进行比较: Differnce between Counting and Binary Semaphores
答案 1 :(得分:0)
计数信号量与条件变量(与互斥量一起使用)一样强大。在许多情况下,当使用计数信号量而不是条件变量实现时,代码可能更简单(如下面的几个示例所示)。
从概念上讲,信号量是非负整数计数。信号量通常用于协调对资源的访问,信号量计数初始化为可用资源的数量。然后,线程会在添加资源时以原子方式递增计数,并在删除资源时以原子方式递减计数。
当信号量计数变为零时,表示不再存在资源,尝试递减信号量块的线程会等到计数大于零。
例如,请参阅this link。