问题标签 [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.
multithreading - 使用测试和设置原子操作实现互斥锁:它适用于 2 个以上的线程吗?
我正在阅读有关测试和设置原子操作的维基百科文章。它说实现互斥的一种方法是使用基于测试和设置的锁。
但是,根据同一篇文章,test-and-set 操作的共识数是有限的,最多可以解决两个并发进程的无等待共识问题。
那么基于 test-and-set 操作的互斥锁是否只对两个线程有效?如果是这样,“实际”互斥锁是如何实现的?
linux - 原子指令是否涉及内核
我正在阅读此链接以了解futex
Linux。这是我不明白的事情。
为了获取锁,可以使用原子测试和设置指令(例如 cmpxchg())测试 0 并设置为 1。在这种情况下,锁定线程获取锁而不涉及内核(以及内核不知道这个 futex 存在)。当下一个线程尝试获取锁时,零测试将失败,需要内核参与。
我不太明白为什么“在不涉及内核的情况下获取锁”。
我一直认为原子指令,例如test-and-set
,总是涉及内核。
那么为什么第一次获取锁不会涉及内核呢?更具体地说,原子指令必须或可能涉及内核?
c - 带有测试和设置的信号量(代码实现可能的错误)
我一直在学习信号量,并且正在查看信号量的网站实现(http://faculty.salina.k-state.edu/tim/ossg/IPC_sync/ts.html),但是,我不明白实现,以节省任何人访问该网站的代码如下所示。
我假设的 TS 方法是 TestandSet(),上面也显示了从同一网站复制的内容,我的问题是,如果出现 3 个进程并使用初始化为 1 的信号量调用 acquire_semaphore,那么信号量的值将变为 -2 并且进程 p2 和 p3 将进入 h 队列并且从未被通知唤醒,这似乎不正确所以我假设代码中有错误?我解决这个问题的假设是,发布信号量中的“if(s.value >= 0) {”行应该是“if(s.value <= 0) {”,因为这会唤醒保持中的下一个进程(h) 排队。我在下面显示了一个表格,我使用名为 p1、p2 和 p3 的 3 个进程手动处理代码。感谢您的任何帮助。
assembly - TAS 指令 68000
要在 M68000 汇编程序中处理并发,我需要了解 TAS 指令的工作原理。
我并不真正关心从手册中可以看到的理论描述(例如http://68k.hax.com/TAS)。最重要的是,我想看到一些例子。
linux - 文件系统 - 测试和设置操作?
test-and-set指令是实现原子锁的一个非常重要的CPU指令。
linux/mac/windows上的文件系统有类似的操作吗?
用例:数据库程序可能将数据存储在文件中。该指令有助于确保在操作进行时另一个进程不会对文件进行更改。