我有一个一直运行的线程:
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被调用时,我得到的异常是“不存在给定名称的句柄。”。我做错了什么?
感谢。
答案 0 :(得分:2)
事实证明问题在于我需要将Global \放在信号量名称前面。
答案 1 :(得分:0)
好像你的订单错了。信号量sem_DoStuff
需要在创建线程之前存在(很可能在调用函数DoStuff
之前)。调用它们的方法/过程应该是创建信号量的方法/过程。