相关疑难解决方法(0)

什么时候应该在C#中使用volatile关键字?

任何人都可以在C#中对volatile关键字提供一个很好的解释吗?它解决了哪些问题,哪些问题没有解决?在哪些情况下它会节省我使用锁定?

c# multithreading

290
推荐指数
8
解决办法
8万
查看次数

如何正确读取Interlocked.Increment'ed int字段?

假设我有一个非易失性的int字段,以及一个它Interlocked.Increment的线程.另一个线程可以直接安全地读取它,还是读取也需要互锁?

我以前认为我必须使用互锁读取来保证我看到当前值,因为毕竟,该字段不是易失性的.我一直在Interlocked.CompareExchange(int, 0, 0)努力实现这一目标.

但是,我偶然发现了这个答案,这表明实际的普通读取总会看到Interlocked.Incremented值的当前版本,并且因为int读取已经是原子的,所以不需要做任何特殊的事情.我还发现了Microsoft拒绝Interlocked.Read(ref int)请求的请求,进一步表明这完全是多余的.

那么我能真正安全地阅读这样一个int领域的最新价值Interlocked吗?

.net c# multithreading thread-safety

56
推荐指数
4
解决办法
1万
查看次数

C#bool是原子的,为什么volatile是有效的

C#中,我们知道a bool是原子的 - 那么为什么将它标记为有效volatile呢?有什么不同,什么是一个好的(甚至是实际的)用例?

bool _isPending;
Run Code Online (Sandbox Code Playgroud)

volatile bool _isPending; // Is this realistic, or insanity?
Run Code Online (Sandbox Code Playgroud)

我在这里这里做了一些阅读,我正在努力确保我完全理解两者的内部运作.我想知道什么时候使用一个与另一个相比,或者只是bool足够.

c# multithreading boolean atomic volatile

11
推荐指数
2
解决办法
1378
查看次数

C#中的[Intrinsic]属性有什么作用?

Google快速搜索“内在属性c#”只会返回有关其他属性的文章,例如[Serializable]。显然,这些被称为“固有属性”。

但是,C#中也有一个本身被调用的属性,[Intrinsic]我试图弄清楚它到底是什么以及它如何工作。在.NET文档的“ 公共属性”页面上,或者据我所知,它在文档的其他任何地方都不存在。

该属性用于.NET核心的内部中的几个地方,例如,在将System.Numerics.Vectors文件夹,如Vector2_Intrinsics.cs。程式码片段:

[Intrinsic]
public Vector2(float x, float y)
{
    X = x;
    Y = y;
}
Run Code Online (Sandbox Code Playgroud)

.net c# intrinsics .net-core

8
推荐指数
1
解决办法
729
查看次数

Volatile.Read/Volatile.Write是否为"双"原子?

MSDN声明

long,ulong,double和decimal,以及用户定义的类型,不保证是原子的5.5变量引用的原子

Volatile.Write Method (Double%, Double)作为原子操作吗?如果是这样如何保证?

Volatile.Write(ref mydouble, value);在一个线程和Volatile.Read(ref mydouble)另一个mydoubledouble类型的地方做是否安全?

这是一般性问题.另一个问题 - 在这种特殊情况下我应该怎么做:

  • 2个处理器Xeon x64服​​务器
  • Windows + MS .NET 4.5
  • 从不同的线程读/写double
  • 最小的延迟(需要最小,因为我正在编写HFT软件)

c# .net-4.5

6
推荐指数
1
解决办法
801
查看次数