【发布时间】:2010-05-12 19:39:49
【问题描述】:
如何在 C# 中使我的函数由互斥信号量保护,也就是 JAVA 中的同步函数
【问题讨论】:
-
你是要保护函数还是成员数据?
-
函数,实际上,它是一个写入文件的函数,在尝试执行多重写入时有时会崩溃...
标签: c# .net multithreading synchronization
如何在 C# 中使我的函数由互斥信号量保护,也就是 JAVA 中的同步函数
【问题讨论】:
标签: c# .net multithreading synchronization
没有什么好办法,只能自己动手:
private readonly object _locker = new object();
public void MyMethod()
{
lock (_locker) {
// Do something
}
}
【讨论】:
您不希望像 Java 这样的同步函数 - 它们不是一个好主意,因为它们使用了其他人可能会干扰的锁结构。你想要的是一个锁对象。基本上,在要保护的类中,创建一个对象类型的私有成员变量
private readonly object lock_ = new object();
然后在你需要同步的任何方法中,使用锁结构自动进入和离开锁:-
public void SomeMethod()
{
lock(lock_)
{
// ...... Do Stuff .........
}
}
【讨论】:
【讨论】:
正如 John 所说,您可以使用 lock (),这与 Monitor.Enter 和 Monitor.Exit 相同。如果您需要跨进程互斥体,请使用 Mutex 类。
【讨论】: