问题标签 [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 回答
1782 浏览

multithreading - 使用测试和设置原子操作实现互斥锁:它适用于 2 个以上的线程吗?

我正在阅读有关测试和设置原子操作的维基百科文章。它说实现互斥的一种方法是使用基于测试和设置的锁。

但是,根据同一篇文章,test-and-set 操作的共识数是有限的,最多可以解决两个并发进程的无等待共识问题。

那么基于 test-and-set 操作的互斥锁是否只对两个线程有​​效?如果是这样,“实际”互斥锁是如何实现的?

0 投票
1 回答
155 浏览

linux - 原子指令是否涉及内核

我正在阅读此链接以了解futexLinux。这是我不明白的事情。

为了获取锁,可以使用原子测试和设置指令(例如 cmpxchg())测试 0 并设置为 1。在这种情况下,锁定线程获取锁而不涉及内核(以及内核不知道这个 futex 存在)。当下一个线程尝试获取锁时,零测试将失败,需要内核参与。

我不太明白为什么“在不涉及内核的情况下获取锁”。

我一直认为原子指令,例如test-and-set,总是涉及内核。

那么为什么第一次获取锁不会涉及内核呢?更具体地说,原子指令必须或可能涉及内核?

0 投票
1 回答
248 浏览

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 个进程手动处理代码。感谢您的任何帮助。

0 投票
1 回答
237 浏览

assembly - TAS 指令 68000

要在 M68000 汇编程序中处理并发,我需要了解 TAS 指令的工作原理。

我并不真正关心从手册中可以看到的理论描述(例如http://68k.hax.com/TAS)。最重要的是,我想看到一些例子。

0 投票
0 回答
12 浏览

linux - 文件系统 - 测试和设置操作?

test-and-set指令是实现原子锁的一个非常重要的CPU指令。

linux/mac/windows上的文件系统有类似的操作吗?

用例:数据库程序可能将数据存储在文件中。该指令有助于确保在操作进行时另一个进程不会对文件进行更改。