信号量:了解初始和最大请求​​数

mtk*_*nko 3 c# multithreading semaphore

我正在学习 c# semaphore 并且不明白一点。我可以像这样初始化信号量:

var semaphore = new Semaphore(4, 6);
Run Code Online (Sandbox Code Playgroud)

很多地方都有这样的解释:

如果要为调用线程保留一些插槽,可以通过使第一个参数小于第二个参数来实现。

这是否意味着只有主线程可以使用剩余的 2 个资源槽?这是否意味着如果我这样写:

var semaphore = new Semaphore(0, 6);
Run Code Online (Sandbox Code Playgroud)

只有主线程可以使用所有 6 个插槽?

Kar*_*ral 6

我喜欢Albahari 的解释

信号量就像夜总会:它有一定的容量,由保镖强制执行。一旦满了,就没有更多的人可以进入,外面就排起了长队。然后,对于每个离开的人,一个人从队列的头部进入。构造函数至少需要两个参数:夜总会当前可用的位置数量和俱乐部的总容量。