线程不安全

class ThreadUnsafe
{
static int _val1 = 1, _val2 = 1;
static void Go()
{
if (_val2 != 0) Console.WriteLine (_val1 / _val2);
_val2 = 0;
}
}///方法的定义和分配的内存地址和大小 都是固定的

这个类不是线程安全的,如果方法Go被两个线程同时 调用,如果第一个线程执行完

_val2 = 0;

而第2个线程执行到 Console.WriteLine (_val1 / _val2);这样就会出错();

class ThreadSafe
{
static readonly object _locker = new object();
static int _val1, _val2;
static void Go()
{
lock (_locker)
{
if (_val2 != 0) Console.WriteLine (_val1 / _val2);
_val2 = 0;
}
}
}

添加一个locker 就可以了,这样就可以保证只有一个线程 执行里面的语句,其他的线程等待第一个线程执行完,排队的线程按照先来先得获得方法的访问


posted on 2012-07-12 16:55  GIS-MAN  阅读(157)  评论(0编辑  收藏  举报

导航