问题标签 [test-and-set]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
962 浏览

synchronization - 如果没有特殊的硬件指令,一个代码将如何测试和设置行为?

我发现的大多数实现都需要硬件指令来执行此操作。但是我强烈怀疑这是必需的(如果是,我不知道为什么......)

0 投票
7 回答
33509 浏览

synchronization - 测试和设置是做什么用的?

在阅读了 Test-and-Set Wikipedia entry之后,我仍然有一个问题“Test-and-Set 将用于什么?”

我意识到您可以使用它来实现 Mutex(如维基百科中所述),但它还有什么其他用途?

0 投票
5 回答
23055 浏览

language-agnostic - 原子指令

原子指令是什么意思?

以下如何成为原子的?

测试和设置

从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?

0 投票
3 回答
1602 浏览

.net - .NET 内存模型、易失性变量和测试和设置:有什么保证?

我知道 .NET 内存模型(在 .NET Framework 上;不是 compact/micro/silverlight/mono/xna/what-have-you)保证对于某些类型(最显着的原始整数和引用)操作保证是原子。

此外,我相信 x86/x64 测试和设置指令 (and Interlocked.CompareExchange) 实际上引用了全局内存位置,因此如果它成功,另一个Interlocked.CompareExchange会看到新值。

最后,我相信该volatile关键字是对编译器的指令,以尽快传播读取和写入,并且不对有关此变量的操作重新排序(对吗?)。

这导致了几个问题:

  1. 我上面的信念是正确的吗?
  2. Interlocked.Read没有 int 的重载,仅适用于 longs(这是 2 个 WORD,因此通常不会以原子方式读取)。我一直认为 .NET 内存模型保证在读取整数/引用时会看到最新的值,但是对于处理器缓存、寄存器等。我开始看到这可能是不可能的。那么有没有办法强制重新获取变量?
  3. volatile 足以解决整数和引用的上述问题吗?
  4. 在 x86/x64 上,我可以假设...

如果有两个全局整数变量 x 和 y,如果我写的话,都初始化为 0:

该 NO 线程将看到 x = 0 和 y = 2(即写入将按顺序发生)。如果它们不稳定,这会改变吗?

0 投票
4 回答
6246 浏览

synchronization - 如何使用 TestAndSet() 解决临界区问题?

我正在为考试而学习,但我在概念上遇到了困难。这是给我的伪代码:

我的导师说这段代码只有三个必要条件(互斥、进度和有限等待)中的两个满足,但我不明白哪个没有满足......??

应该如何修改代码以支持缺失条件来解决关键区域问题?提前感谢您的任何见解!

0 投票
1 回答
4439 浏览

gcc - gcc 的 atomic test 和 set builtin 是否与 atomic fetch 和 store 操作相同?

我在 MCS 锁的描述中遇到了一个原子“获取和存储”指令。

据我所知,这以原子方式将一个值写入内存位置并返回该内存位置的原始值,对吗?

并且是 gcc 的 atomic builtin,

与原子获取和存储相同吗?

0 投票
3 回答
761 浏览

c++ - 无锁原子状态类 - 正确吗?

我只是在尝试在结构上实现原子读/写时寻找反馈(明显的缺陷/改进方法)。

将有一个写入线程和多个读取线程。目的是防止读者对结构有不一致的看法,同时又不会过多地妨碍作者。

我正在使用 fetch-and-add atomic 原语,在这种情况下由 Qt 框架提供。

例如:

OneWriterAtomicState 实现:

这是第二版(memcpy,读者屈服,希望修复 getState() ):

0 投票
1 回答
382 浏览

c - 对列表的原子操作

假设我有一个列表,我想使用一个test_and_set操作,其参数是计算某个指针地址l->a.next->next。我认为,这不会是原子的,而且test_and_set将毫无用处。有没有办法以原子方式计算该指针值,以便 TAS 以原子方式工作?

0 投票
6 回答
212 浏览

python - 如何在 Python 中只处理一次重复的有序列表中的每个项目?

我有一个要处理的有序列表,其中包括一些重复项,我只想处理第一次出现。目前,我在 Python v2.7 中这样做:

无论如何要同时插入一个新元素seen并检测它是否已经存在?(这样可以避免在 . 中重复查找fmtset

或者,或者,我可以formats在循环之前以某种方式过滤掉重复的条目吗?

0 投票
1 回答
1302 浏览

c - 为什么 CompareAndSwap 比 TestAndSet 更强大的指令?

请考虑下面的 CompareAndSwap 代码,让我知道为什么这个原子指令比原子 TestAndSet 更强大,因为它是一个互斥原语?