问题标签 [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.
synchronization - 如果没有特殊的硬件指令,一个代码将如何测试和设置行为?
我发现的大多数实现都需要硬件指令来执行此操作。但是我强烈怀疑这是必需的(如果是,我不知道为什么......)
synchronization - 测试和设置是做什么用的?
在阅读了 Test-and-Set Wikipedia entry之后,我仍然有一个问题“Test-and-Set 将用于什么?”
我意识到您可以使用它来实现 Mutex(如维基百科中所述),但它还有什么其他用途?
language-agnostic - 原子指令
原子指令是什么意思?
以下如何成为原子的?
测试和设置
从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?
.net - .NET 内存模型、易失性变量和测试和设置:有什么保证?
我知道 .NET 内存模型(在 .NET Framework 上;不是 compact/micro/silverlight/mono/xna/what-have-you)保证对于某些类型(最显着的原始整数和引用)操作保证是原子。
此外,我相信 x86/x64 测试和设置指令 (and Interlocked.CompareExchange
) 实际上引用了全局内存位置,因此如果它成功,另一个Interlocked.CompareExchange
会看到新值。
最后,我相信该volatile
关键字是对编译器的指令,以尽快传播读取和写入,并且不对有关此变量的操作重新排序(对吗?)。
这导致了几个问题:
- 我上面的信念是正确的吗?
Interlocked.Read
没有 int 的重载,仅适用于 longs(这是 2 个 WORD,因此通常不会以原子方式读取)。我一直认为 .NET 内存模型保证在读取整数/引用时会看到最新的值,但是对于处理器缓存、寄存器等。我开始看到这可能是不可能的。那么有没有办法强制重新获取变量?- volatile 足以解决整数和引用的上述问题吗?
- 在 x86/x64 上,我可以假设...
如果有两个全局整数变量 x 和 y,如果我写的话,都初始化为 0:
该 NO 线程将看到 x = 0 和 y = 2(即写入将按顺序发生)。如果它们不稳定,这会改变吗?
synchronization - 如何使用 TestAndSet() 解决临界区问题?
我正在为考试而学习,但我在概念上遇到了困难。这是给我的伪代码:
我的导师说这段代码只有三个必要条件(互斥、进度和有限等待)中的两个满足,但我不明白哪个没有满足......??
应该如何修改代码以支持缺失条件来解决关键区域问题?提前感谢您的任何见解!
gcc - gcc 的 atomic test 和 set builtin 是否与 atomic fetch 和 store 操作相同?
我在 MCS 锁的描述中遇到了一个原子“获取和存储”指令。
据我所知,这以原子方式将一个值写入内存位置并返回该内存位置的原始值,对吗?
并且是 gcc 的 atomic builtin,
与原子获取和存储相同吗?
c++ - 无锁原子状态类 - 正确吗?
我只是在尝试在结构上实现原子读/写时寻找反馈(明显的缺陷/改进方法)。
将有一个写入线程和多个读取线程。目的是防止读者对结构有不一致的看法,同时又不会过多地妨碍作者。
我正在使用 fetch-and-add atomic 原语,在这种情况下由 Qt 框架提供。
例如:
OneWriterAtomicState 实现:
这是第二版(memcpy,读者屈服,希望修复 getState() ):
c - 对列表的原子操作
假设我有一个列表,我想使用一个test_and_set
操作,其参数是计算某个指针地址l->a.next->next
。我认为,这不会是原子的,而且test_and_set
将毫无用处。有没有办法以原子方式计算该指针值,以便 TAS 以原子方式工作?
python - 如何在 Python 中只处理一次重复的有序列表中的每个项目?
我有一个要处理的有序列表,其中包括一些重复项,我只想处理第一次出现。目前,我在 Python v2.7 中这样做:
无论如何要同时插入一个新元素seen
并检测它是否已经存在?(这样可以避免在 . 中重复查找fmt
。set
)
或者,或者,我可以formats
在循环之前以某种方式过滤掉重复的条目吗?
c - 为什么 CompareAndSwap 比 TestAndSet 更强大的指令?
请考虑下面的 CompareAndSwap 代码,让我知道为什么这个原子指令比原子 TestAndSet 更强大,因为它是一个互斥原语?