C# 多线程 lock锁使用
用途:锁住并发资源,避免并发问题影响程序正常运行
static readonly object objSync = new object();
static long max = 10000000;
static long _count = 0;
public void TestLock()
{
Thread t1 = new Thread(new ThreadStart(() =>
{
for (int i = 0; i < max; i++)
{
lock (objSync)
{
_count++;
}
}
}));
t1.Start();
for (int i = 0; i < max; i++)
{
lock (objSync)//lock锁参数必须是引用类型
{
_count++;
}
}
t1.Join();//等待 t1线程执行完毕
Console.WriteLine("_count结果是:{0}" + _count);
Console.ReadKey();
}
C#中对象具有一个同步索引块的属性,默认值为-1,资源被锁住后将同步索引块改为非-1,此时其他程序要使用资源只能等待资源被释放。