zoukankan      html  css  js  c++  java
  • 使用Interlocked类进行简单状态更改

    在多线程处理中,lock语句是常见的处理方式,但是如果只是简单的原子性更新,Interlocked类提供更好的新能,为多个线程共享的变量提供原子操作。请考虑使用它替换lock。

    示例一,myField变量是递增的:

    lock(lockObject)
    {
        myField++;
    }

    使用Interlocked.Increment

    System.Threading.Interlocked.Increment(myField);

    示例二,判断对象一是否为null,如果是则替换第一个对象:

    if(x == null)
    {
        lock(lockObject)
        {
            if(x == null)
            {
                x = y;
            }
        }
    }

    使用Interlocked.CompareExchange

    System.Threading.Interlocked.CompareExchange(ref x, y, null);

    在.NET Framework 2.0 版中,CompareExchange方法具有可以用于任何引用类型的类型安全替换的泛型重载。

    Interlocked 类常用方法

    int Add(ref int location1, int value)

    对两个 32 位整数进行求和并用和替换第一个整数,上述操作作为一个原子操作完成。

    object CompareExchange(ref object location1, object value, object comparand) 

    比较对象location1是否等于对象comparand,如果相等则将对象value替换location1,并返回location1的原始值(未替换前的对象)

    int Decrement(ref int location)

    以原子操作的形式递减指定变量的值并存储结果,返回递减的值。

    int Increment(ref int location)

    以原子操作的形式递增指定变量的值并存储结果,返回递增的值。

    double Exchange(ref double location1, double value)

    以原子操作的形式,将双精度浮点数location1设置为指定的value值并返回location1的原始值。

  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/zhengzc/p/8513041.html
Copyright © 2011-2022 走看看