2010-05-12 166 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是一樣的。如果您需要跨進程互斥量,請使用互斥量類。