在应用程序开发过程中,常常需要同步类操作。本文介绍使用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.传入该对象。