0

这可能有一个明显的答案,但无论如何我都会问。

是否有等效于 C# 的阻塞集合的变量?我想要的是让我的所有线程都能够访问共享变量。它不是一个集合,只是一个共享变量,在每个线程使用它时都会对其值进行调整。我喜欢blockingcollection 的地方在于ques 和locks 是由C# 管理的,并且希望只有一个变量有类似的东西?

我可以使用公共静态变量并自己创建锁,但我认为我应该检查一下。

编辑:联锁是否有可能。

4

1 回答 1

0

什么样的变量,你想用这个变量做什么?

互锁将允许您以原子方式访问变量。

这意味着对于原始类型(int、float、object ref),您可以以原子且因此线程安全的方式执行一些原始操作(增量、交换值等)。例如,如果您希望计数器从多个线程中递增/递减,这可能是一个很好的解决方案。

其他(更强大的)用途包括条件原子交换,它是软件事务内存习语的一部分,允许在不使用其他同步机制(例如互斥锁)的情况下从多个线程对变量进行安全更改。

但是,互锁操作必须在硬件级别执行一些锁定,因此具有一定的性能损失,并且不是多线程数据访问和竞争条件的魔杖。

此外,它们只真正适用于原始类型和操作。同时在几种类型上交错几个操作需要更多的布线,并且不被互锁类直接支持。

于 2015-06-09T12:41:32.853 回答