锁定方法仅适用于2个线程

时间:2016-08-29 11:52:52

标签: c# multithreading locking mutex

我有以下代码:

XML

当一个活动作业正在工作而第二个线程进入同一个方法时,我希望它被锁定为第二个线程并等待..但是,当它已经锁定第二个线程,然后第三个线程输入代码时,我希望它退出方法而不是等待并输入作业执行。

我可以使用静态计数器变量,并通过作业执行中的线程数增加/减少其值。但我想知道是否已有更好的做法来解决这个问题。

2 个答案:

答案 0 :(得分:4)

您正在寻找System.Threading.Semaphore

var sem = new Semaphore(0, 2);

创建一个初始值为零且最多为2的信号量。最多两个线程可以无阻塞地调用sem.WaitOne()。之后,调用sem.WaitOne()的线程将阻塞,直到另一个线程调用sem.Release()

有一个重载WaitOne(int timeout)接受超时参数。如果超时传递零,则调用不会阻塞,并立即返回。布尔返回值表示您是否成功获取了信号量。在您的情况下,如果它返回False,您只需中止操作。

答案 1 :(得分:2)

使用容量为2的Semaphore