计数信号量是什么?

时间:2012-02-11 17:54:11

标签: terminology semaphore counting

嗨,我确实知道Counting Semaphore是如何工作的?请帮助我理解。

根据我的理解,如果我们将count设置为3,那么进程可以使用3个线程来访问资源。所以,这里只有3个线程可以访问资源。当1个线程离开时,另一个等待线程进入。如果我的理解是正确的,这3个线程也可以破坏共享数据。那么它的用途是什么?

1 个答案:

答案 0 :(得分:3)

你的观察是正确的;通常,资源需要被限制到一个线程(例如,它被写入),或者可以安全地使用无限数量的线程(例如,它是只读的)。限制5个线程使用的资源很少有用。

因此,计数 N 的计数信号量通常用于限制对 N 资源池的访问...当计数达到零时,下一个线程必须等待从池中获取资源。

但是,我在实践中通常不会发现这有用,因为仅仅控制访问资源池的线程的 number 是不够的,您还需要自己管理资源。因此,我通常最终得到一个阻塞队列,其中包含线程可以从中获取的托管资源。当线程完成资源时,它将该资源(例如对象)返回到队列,以便等待的线程可以接受它。

队列可能在内部使用信号量来控制对内部缓冲区的访问,但这通常是从队列用户封装的。

另见