在應用程序開發過程中,常常需要同步類操作。本文介紹使用lock方法,用共享變量的形式來實現線程間同步操作。
public class SyncTest
{
private object syncstate = new object();
private int num = 0;
public void Encrement()
{
lock (syncstate)
{
for (int i = 0; i < 1000; i++)
{
num++;
Console.WriteLine("Current Thread {0} num = {1};",Thread.CurrentThread.ManagedThreadId, num);
}
}
}
}
public class SampleSync
{
public void task(object obj)
{
SyncTest o = obj as SyncTest;
o.Encrement();
}
}
public void Encrement()
{
int num = 0;
SyncTest s = new SyncTest();
for (int i = 0; i < 10;i++ )
{
Task.Run(() => {
new SampleSync().task(s);
});
}
Thread.Sleep(1000*10);
}
結果實現瞭如下:
Current Thread 24 num = 1995;
Current Thread 24 num = 1996;
Current Thread 24 num = 1997;
Current Thread 24 num = 1998;
Current Thread 24 num = 1999;
Current Thread 24 num = 2000;
Current Thread 14 num = 2001;
Current Thread 14 num = 2002;
Current Thread 14 num = 2003;
結論:
1.首先在共享的類中聲明 private object syncstate = new object();注意,當類作爲唯一傳入的實例類,纔能有效控制併發訪問。如果每傳入一個對象,都是新的對象,即無效。
2.在多個線程啓動之前,得到同步對象的實例。
3.傳入該對象。