频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
深入浅出多线程系列之四:简单的同步 lock
2011-05-24 13:44:35           
收藏   我要投稿

1: 考虑下下面的代码:

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

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

 

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

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

但是此时线程B才刚刚执行到Console.WriteLine方法,而此时_val2=0.所以你有可能会得到一个pide 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 <
点击复制链接 与好友分享!回本站首页
相关TAG标签 线程
上一篇:深入浅出多线程系列之五:一些同步构造(上篇)
下一篇:深入浅出多线程系列之三:线程池
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站