使用命名系统信号量作为事件来触发另一个进程中的某些事物

时间:2010-06-11 03:48:35

标签: c# semaphore

我有一个一直运行的线程:

private void DoSomeStuffThread() {
Semaphore sem = new Semaphore(0, 3, "sem_DoStuff");
sem.WaitOne();
do {
    //do some stuff
} while (sem.WaitOne());
}

我希望能够只在其他进程中的某些内容执行时执行do块中的内容。我正在尝试使用名为“sem_DoStuff”的系统信号量来实现此目的。

在我的其他进程中执行的代码:

public string DoStuff() {
try {
    Semaphore sem = Semaphore.OpenExisting("sem_DoStuff");
    sem.Release();
} catch (Exception e) {
    return e.Message;
}
}

因此,想法是当DoStuff被调用时,信号量被释放,DoSomeStuffThread停止等待,执行do块中的内容,然后在被调用之前再次等待DoStuff。但是,当DoStuff被调用时,我得到的异常是“不存在给定名称的句柄。”。我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

事实证明问题在于我需要将Global \放在信号量名称前面。

答案 1 :(得分:0)

好像你的订单错了。信号量sem_DoStuff需要在创建线程之前存在(很可能在调用函数DoStuff之前)。调用它们的方法/过程应该是创建信号量的方法/过程。