【发布时间】:2011-08-10 22:11:31
【问题描述】:
我在 c# 和一般情况下的线程方面有点新意,
在我的程序中,我使用mutex 只允许 1 个线程进入关键部分,并且由于未知原因进行一些 cw 打印,我可以看到超过 1 个线程进入我的关键部分,这是我的代码:
Mutex m = new Mutex();
m.WaitOne();
<C.S> // critical section here
m.ReleaseMutex();
我非常想知道我是否在这里做错了,提前感谢您的帮助。
编辑:
我的代码包含类,所以基本上看起来更像这样:
public class test
{
private mutex m;
public test()
{
m = new mutex();
}
public func()
{
m.WaitOne();
<C.S> // critical section here
m.ReleaseMutex();
}
}
【问题讨论】:
-
您必须拥有多个该类的实例。
-
即实例级互斥锁;您确定您的编码不在单独的不相关实例的关键部分吗?此外,任何错误都会导致代码永久锁定 - 您需要
try/finally以确保安全。 -
编辑后:此 Mutex 仅在对象级别起作用,即 1 个 CrtentialSection / 实例。这就是你想要的吗?
-
信息:
Mutex是mutual exclusion
标签: c# multithreading mutex