Interlocked说明及使用
程序员文章站
2022-05-27 22:50:38
...
Interlocked 为多个线程共享的变量提供原子操作。
主要方法:
//替换usingResource为1,返回原始值 Interlocked.Exchange(ref usingResource, 1); //usingResource增加4 Interlocked.Add(ref usingResource, 4); //比较替换。如果值usingResource为4 则替换为10 Interlocked.CompareExchange(ref usingResource, 10, 4); //usingResource-- Interlocked.Decrement(ref usingResource); //usingResource++ Interlocked.Increment(ref usingResource);
Interlocked.Exchange可实现并行不阻塞锁的功能,
//一种否认重入的简单方法。多线程争用时只有一个线程执行进来。 static bool UseResource() { //返回0则进入方法执行 if (0 == Interlocked.Exchange(ref usingResource, 1)) { Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name); //访问非线程安全资源的代码将在这里。 //模拟一些工作 //Thread.Sleep(500); Console.WriteLine("{0} exiting lock", Thread.CurrentThread.Name); //释放锁,重新设置为0 Interlocked.Exchange(ref usingResource, 0); return true; } else { Console.WriteLine(" {0} was denied the lock", Thread.CurrentThread.Name); return false; } }
上一篇: NuGet出现错误解决方法
下一篇: 登录时记住用户名密码的实现方式