[C#.NET][Thread] 小心使用线程的锁定对象
发布时间:2020-12-16 01:24:23 所属栏目:百科 来源:网络整理
导读:[C#.NET][Thread] 小心使用线程的锁定对象 假设我对一个耗时的工作使用了ThreadPool,当我实例化多个执行个体时,不同的执行个体都要能各自工作。 public class DemoClass{ private static object s_lock = new object(); private ulong m_value = 0; public
[C#.NET][Thread] 小心使用线程的锁定对象 假设我对一个耗时的工作使用了ThreadPool,当我实例化多个执行个体时,不同的执行个体都要能各自工作。
public class DemoClass { private static object s_lock = new object(); private ulong m_value = 0; public void DoWork(string name) { ThreadPool.QueueUserWorkItem(o => { lock (s_lock) { for (ulong i = 0; i < 1000000; i++) { m_value = i; Console.WriteLine(string.Format("{0} method value = {1}",name,m_value)); Thread.Sleep(1000); } } }); } } 实例化类
internal class Program { private static void Main(string[] args) { DemoClass c1 = new DemoClass(); DemoClass c2 = new DemoClass(); c1.DoWork("NO.1"); Thread.Sleep(1000); c2.DoWork("NO.2"); Console.ReadKey(); } } 上段程序的执行结果如下:
使用静态变量锁定的结果,让不同的执行个体都参考了同一个锁定对象,这带来了一个问题,每当程序员使用这个类,调用非静态方法时,都会遇到这个锁,都会同步,这就失去了我们的目的
将 s_lock 的 static 拿掉的执行结果
若有谬误,烦请告知,新手发帖请多包涵 原文:大专栏 ?[C#.NET][Thread] 小心使用线程的锁定对象 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |