• Interlocked


    Interlocked

    MSDN 描述:为多个线程共享的变量提供原子操作。主要函数如下:

    Interlocked.Increment    原子操作,递增指定变量的值并存储结果。
    Interlocked.Decrement       原子操作,递减指定变量的值并存储结果。
    Interlocked.Add        原子操作,添加两个整数并用两者的和替换第一个整数

    Interlocked.CompareExchange(ref a, b, c);  原子操作,a参数和c参数比较,  相等b替换a,不相等不替换。

    下面是个interlock anything的例子:

    public static int Maximum(ref int target, int value)
            {
                int currentVal = target, startVal, desiredVal;  //记录前后值
                do
                {
                    startVal = currentVal; //记录循环迭代的初始值。
                    desiredVal = Math.Max(startVal, value); //基于startVal和value计算期望值desiredVal
    
                    //高并发下,线程被抢占情况下,target值会发生改变。
    
                    //target startVal相等说明没改变。desiredVal 直接替换。
                    currentVal = Interlocked.CompareExchange(ref target, desiredVal, startVal);
    
                } while (startVal != currentVal); //不相等说明,target值已经被其他线程改动。自旋继续。
                return desiredVal;
            }
  • 相关阅读:
    parallel-fastq-dump是一个大坑
    生信软件安装(2)
    2018年一些感悟
    raw data/PF data/Q30 data/clean data的不同
    专题
    结构体
    指针和数组
    指针
    函数的声明
    C语言中的函数
  • 原文地址:https://www.cnblogs.com/yy1234/p/11159177.html
Copyright © 2020-2023  润新知