当前位置:编程学习 > 网站相关 >>

深入浅出多线程系列之四:简单的同步 lock

1: 考虑下下面的代码:

class ThreadUnsafe
    {
        static int _val1 = 1, _val2 = 1;

        internal static void Go()
        {
            if (_val2 != 0)
            {
                Console.WriteLine(_val1 /_val2);
            }
            _val2 = 0;
        }
    }

 

这段代码是非线程安全的,假设有两个线程A,B,A,B都执行到了Go方法的if判断中,假设_val2=1.所以两个线程A,B都通过if判断,

A执行了Console.WriteLine方法,然后退出if语句,执行_val2=0,此时_val2=0.

但是此时线程B才刚刚执行到Console.WriteLine方法,而此时_val2=0.所以你有可能会得到一个divide by zero 的异常。

 

为了保证线程安全,我们可以使用Lock关键字,例如:

        static readonly object _locker = new object();
        static int _val1 = 1, _val2 = 1;

        internal static void Go()
        {
            lock (_locker)
            {
                if (_val2 != 0)
                {
                    Console.WriteLine(_val1 / _val2);
                }
                _val2 <
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,