gpt4 book ai didi

c# - c#中互斥量的使用

转载 作者:IT王子 更新时间:2023-10-29 04:09:05 26 4
gpt4 key购买 nike

我对 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();
}


}

最佳答案

这里的问题是你所有的调用者都使用了一个不同的互斥体;您需要将锁定对象共享,通常是将其设为一个字段。例如,切换到更简单的 lock 隐喻:

private readonly object syncLock = new object();
public void ThreadSafeMethod() {
lock(syncLock) {
/* critical code */
}
}

或者使用互斥体:

private readonly Mutex m = new Mutex();
public void ThreadSafeMethod() {
m.WaitOne();
try {
/* critical code */
} finally {
m.ReleaseMutex();
}
}

关于c# - c#中互斥量的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com