zoukankan      html  css  js  c++  java
  • 自旋锁-SpinLock(.NET 4.0+)

    参考:https://www.cnblogs.com/1zhk/p/5269722.html  和 https://www.cnblogs.com/chenwolong/archive/2017/05/18/6872672.html

    Parallel.ForEach 和 ForEach  与 Parallel.For 和 For 一样,一个是异步执行,开辟多个线程。一个是同步执行,开辟一个线程。

    如果任务很小,那么由于并行管理的附加开销(任务分配,调度,同步等成本),可能并行执行并不是优化方案。

    这里我们使用了Parallel.For方法来做演示,Parallel.For用起来方便,但是在实际开发中还是尽量少用,因为它的不可控性太高,有点简单粗暴的感觉,可能带来一些不必要的"麻烦",

    最好还是使用Task,因为Task的可控性较好。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        public class SpinLockDemo
        {
            int i = 0;
            List<int> li = new List<int>();
            SpinLock sl = new SpinLock();
          
            public void Execute()
            {
                foo1();
                //li.ForEach((t) => { Console.WriteLine(t); });
                Console.WriteLine("Li Count - Spinlock: " + li.Count);
                Console.ReadKey();
            }
    
            public void foo1()
            {
                Parallel.For(0, 10000, r =>
                {
                    bool gotLock = false;     //释放成功
                    try
                    {
                        sl.Enter(ref gotLock);    //进入锁
                        //Thread.Sleep(100);
                        if (i == 0)
                        {
                            i = 1;
                            li.Add(r);
                            i = 0;
                        }
                    }
                    finally
                    {
                        if (gotLock) sl.Exit();  //释放
                    }
    
                });
            }
    
           
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                SpinLockDemo sp = new SpinLockDemo();
                sp.Execute();
    
            }
        }
    }
  • 相关阅读:
    stata如何建立交互项
    PSM的stata实现
    Stata结果输出:outreg2命令详解
    stata固定效应
    【C++/Qt】cmake生成可执行文件流程(Windows/Linux)
    【数学相关】概率论手写笔记
    【搜索】dfs&bfs
    【C/C++】对拍教程
    【MySQL】MySQL基础操作(下)
    【Linux】ubuntu初始配置
  • 原文地址:https://www.cnblogs.com/pu369/p/9995855.html
Copyright © 2011-2022 走看看