欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
            }
        }

 

 

相关标签: Interlocked