• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#SpinLock用法。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 class Program
    {
        static void Main(string[] args)
        {
            var count = 0;
            var taskList = new Task[10];
            Stopwatch sp = new Stopwatch();
            sp.Start();

            // 不要意外复制。每个实例都是独立的。
            SpinLock spinLock = new SpinLock();
            for (int i = 0; i < taskList.Length; i++)
            {
                taskList[i] = Task.Run(() =>
                {
                    bool lock = false;
                    for (int j = 0; j < 10_000_000; j++)
                    {
                        spinLock.Enter(ref _lock);
                        count++;
                        spinLock.Exit();
                        lock = false;
                    }
                });
            }

            sp.Stop();
            Task.WaitAll(taskList);
            Console.WriteLine($"完成! 耗时:{sp.ElapsedTicks}");
            Console.WriteLine($"结果:{count}");
        }
    }

微软文档:  https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.spinlock?redirectedfrom=MSDN&view=netframework-4.8#code-snippet-2p%23code-snippet-2

注解

如何:使用旋转锁进行低级别同步。

通常, 在持有自旋锁时, 应避免使用以下任何操作:

  • 堵塞

  • 调用自身可能会阻止的任何内容,

  • 同时保留多个自旋锁,

  • 进行动态调度的调用 (interface 和虚方法),

  • 对任何代码进行静态调度调用, 而不是任何代码, 或

  • 分配内存。

SpinLock

SpinLock字段中存储实例。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#判断日期是否合法发布时间:2022-07-10
下一篇:
C#Dictionary增加的方法发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap