2010-05-12 124 views
2

我如何在C#中,我的功能将被互斥看守信号在JAVA又名同步功能做同步功能

+0

您是否试图防范功能或成员数据? – 2010-05-12 19:42:06

+0

函数,实际上,它是写入文件的函数,并且它在尝试执行multywright时有时会崩溃... – aharon 2010-05-12 20:31:59

回答

4

你不想像Java一样同步函数 - 它们是一个糟糕的主意,因为它们使用了一个其他可能会干扰的锁构造。你想要的是一个锁定对象。基本上,你要保护的类,在您需要同步,使用锁结构,自动进入和离开锁定任何方法来创建对象类型的私有成员变量

private readonly object lock_ = new object(); 

然后: -

public void SomeMethod() 
{ 
    lock(lock_) 
    { 
     // ...... Do Stuff ......... 
    } 
} 
+2

我以为这就是我说的。 – 2010-05-12 19:44:05

+0

...和变量名称后面的下划线*。有一个我从未见过的约定。 – 2010-05-12 19:45:27

+0

这是释义版本:) – 2010-05-12 19:45:37

10

有做到这一点没有什么好办法,除非自己做:

private readonly object _locker = new object(); 

public void MyMethod() 
{ 
    lock (_locker) { 
     // Do something 
    } 
} 
+0

实际上有一个互斥对象;这是一个坏主意吗? – 2010-05-12 19:46:10

+2

互斥锁比锁定(监视器对象)慢。它只是用于跨进程通信,我相信使用操作系统内置的互斥功能。 – 2010-05-12 19:48:00

0

正如John所说,你可以使用lock(),这与Monitor.Enter和Monitor.Exit是一样的。如果您需要跨进程互斥量,请使用互斥量类。