【发布时间】:2017-10-22 17:41:24
【问题描述】:
我有一个在多个线程之间共享的枚举:
public enum Action
{
Read,
Write,
None
}
在一个类中,我有一个 Action 类型的变量:
public Action _action;
这是一个共享变量,即从多个线程中更新和读取。
例如,从我做的一个线程:
_action = Action.Read
还有另一个:
if (_action == Action.Read)
{
}
else if (_action == Action.Write)
{
}
else if (_Action == Action.None)
{
}
else
{
}
所以我想使用 Interlock 同时从不同的线程更新和/或读取它。我怎样才能通过属性来做到这一点?
我看过很多帖子,比如下面一个:
How to apply InterLocked.Exchange for Enum Types in C#?
这里的问题是枚举需要转换为 int,但我想保留枚举而不进行转换。可能吗?如果是这样,你能发布一些例子吗?另外是否可以将易失性与联锁结合起来?我的意思是对易失性枚举应用互锁。
【问题讨论】:
-
这个问题和链接的问题问的是同一件事:“我知道如何通过强制转换来解决这个问题。我可以不用强制转换来解决它吗?”我不认为说“不,真的,我不想使用强制转换”会使这些答案无效或使其不重复。您可能会尝试调整接近如果不是完全重复的问题Interlocked.CompareExchange with enum 的一些答案,但我认为您会发现这些解决方案并不比铸造更漂亮/更干净/更理想。真的。
标签: c# enumeration volatile atomic interlocked