考考和我一样的C#的初学者:C# 中线程安全问题
南郁 《白话C++之练功》、《练武》 书籍作者 2003-12-20 07:09:36 是关于 lock() 的.
设有两个线程,都有可能改变对象 Obj,改变的可能值为: null, Obj1,Obj2;
下面是示例代码:
object Obj1 = new object;
object Obj2 = new object;
object Obj = null;
//线程1和线程2的操作过程:
void ThreadProcc()
{
Obj = ... //改变Obj,让它等于(指向) Obj1 或 Obj2 或 null
//...其它依赖于Obj的操作
}
两个线程同时操作, 显然可能造成某个线程正在进行依赖于Obj的操作时,另一个线程却修改了Obj.这就会造成混乱.所以我们需要对Obj进行"锁定".
//锁定后的代码:
void ThreadProc()
{
lock (Obj)
{
Obj = ... //改变Obj,让它等于(指向) Obj1 或 Obj2 或 null
//...其它依赖于Obj的操作
}
}
这段代码在lock的设计思想上是错误的.你们认为呢?