这是实现线程安全读/写Guid属性的正确方法吗?

Jos*_*osh 6 c# thread-safety

我正在实现一个将从多个线程并发使用的类.大多数属性获取并设置原始类型,Interlocked类可以正确处理它们.该课程包括Guid属性.这不是直接以线程安全的方式实现的.这是你如何实现该属性?提前致谢.

private Byte[] _activityId;
public Guid ActivityId 
    {
        get { return new Guid(this._activityId); }
        set
        {
            Byte[] bytes = value.ToByteArray();
            Interlocked.Exchange(ref this._activityId, bytes);
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:所以到目前为止唯一提出的解决方案不包括使用任何"线程"类或结构.所以我将提出我已在评论中提出的问题:

我的理解是引用/原始值类型分配是原子的,但是Interlocked将保证更改传播到所有线程.如果我们只是简单地分配值,为什么Interlocked会公开API以交换引用类型和原始值?

das*_*ght 2

我认为你可以使用其他重载Interlocked.Exchange

private volatile object _activityId; // Yes, object :)
public Guid ActivityId {
    get { return (Guid)_activityId; }
    set { _activityId = value; }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为Guid现在已装箱,并且引用类型的分配是原子的。