多线程的Monitor机制

1.使用方法:

                Monitor.Enter(buffer);
                try
                {
                    for (int k = 0; k < 100; k++)
                        sum += buffer[k];
                }
                finally
                {
                    Monitor.Exit(buffer);
                }  
 
说明:将缓存buffer锁定,防止其他线程对该资源进行操作,最后释放锁
 
当对值类型资源进行Monitor锁时需注意:
 
                int a = 1;
                Monitor.Enter(a);
                try
                {
                    a *= 3;
                }
                finally
                {
                    Monitor.Exit(a);
                }    
 
变量a为不能直接传递给Monitor.Enter()和Monitor.Exit(),需进行俩次装箱操作,结果导致以下Monitor机制
 
解决办法: 先将值类型转换为引用类型
 
            int a;
            object o = a;
            
            Monitor.Enter (o);
            try {
            a *= 3;
            }
            finally {
            Monitor.Exit (o);
            }  
 
 
☆ C# Lock关键字不需要考虑这一点
 
 
 
 
 
 
 
 
 
posted @ 2019-04-30 22:22  NCat  阅读(510)  评论(0)    收藏  举报