问题标签 [interlocked]
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.
c# - 删除 Interlocked.Add in Parallel.For?
我有一些代码可以使用parallel.for进行一些查找并计算出现次数:
这个版本比顺序计算快得多。但我想找到一个不同的解决方案来计算发生次数,因为 Interocked.Add 是一个瓶颈。我正在调查 Plinq 是否是一种选择,但到目前为止还没有找到一种方法来计算数组中 nextPos1 元素的出现次数。
c# - Interlocked.Increment 实际上在做什么?
Interlocked.Increment
似乎是需要在多线程代码中执行的最标准/最简单的操作之一。
我假设该方法的功能是任何具有线程经验的人都可以复制的某种模式。
所以基本上我想知道的是,是否有人可以提供该Interlocked.Increment
方法在内部实际执行的操作的精确副本(并解释其工作原理)?(我已经寻找实际方法的来源但找不到它)
c++ - 使用 InterlockedCompareExchange 无锁
我正在尝试使用联锁操作使以下代码片段无锁,知道如何翻译吗?
我在想类似的东西
这有什么问题/种族吗?
c# - Interlocked.Exchange 可以交换两个 byte[] 数组吗?
我想原子地交换两个字节数组,而不需要锁。即我不想做
这可能与 Interlocked.Exchange 吗?我看到它适用于文档中的 int 数组。
谢谢!
c# - 遇到意外的联锁行为?
我正在编写一个网络链接检查程序,并遇到了我无法解释的 Interlocked 行为。首先,这是代码的精简版:
我在调试输出中看到的是:
- LinkChecker:检查链接“http://serverfault.com”,剩余:1
- LinkChecker:已检查链接“http://superuser.com”,剩余:0
- LinkChecker:检查链接“http://stackoverflow.com”,剩余:-1
我不明白为什么(在某些代码运行中)_remainingLinks
变得消极。AllLinksChecked
这也具有导致事件过早触发的副作用。(顺便说一句,上面的代码包含唯一_remainingLinks
被触及的地方。)
我究竟做错了什么?
c++ - 结构的互锁交换
我想使用 WinAPI 中的 InterlockedExchange 来使用线程的无锁同步。
目前我有这样的课。
一个线程可以设置一个新值,而另一个线程可以读取该值。
现在我想做的是将LONG
值更改为struct
. WinAPI中有什么方法可以struct
免费复制锁吗?
c++ - 使用 Interlocks 进行线程同步并保持缓存一致性
如果我要使用某种算法,该算法在 C++ 中的变量上使用 InterlockCompareExchange 操作来确定特定线程是否正在写入一组数据(通过创建我自己的小锁),我如何确保互锁操作如果数据存储在 i7 上的 2 级缓存中,则其他线程会立即看到更新的值。
我知道缓存一致性用于使多核处理器的缓存之间的数据保持一致,但是当一个核心使用互锁功能更新变量并且缓存检查并修复一致性问题而另一个核心时,那么一小段时间呢?正在检查它在自己的缓存中的变量?如果我确保执行 InterlockCompareExchange 操作的变量是易失性的,以便将更改直接写入内存,这个问题会得到解决吗?我是否正确地认为内存屏障(VS 上的 MemoryBarrier())不能确保缓存一致性,而只能确保不需要的指令重新排序?
我希望我的问题不会太模糊。如果我是的话,我会尝试回答任何评论。我没有任何源代码可以发布这个问题,因为我没有任何具体问题,但想知道是否有任何问题以供将来参考,尤其是 c++0x 有互锁作为一部分其标准库。
谢谢你。
c++ - 联锁函数 c++
我正在开发一个使用共享内存和联锁功能的系统。
假设我有volatile unsigned int n, a, b
。我想原子地执行以下伪代码:
我该怎么做?您可以同时使用多个互锁功能吗?
c# - 使用 Interlocked 测试并有条件地更新 long
有没有一种巧妙的方法可以使用类来做到这一点Interlocked
?还是我应该只使用lock { }
?
我的具体用例是我有多个线程来计算一个long
值,并将其与共享的“最大值”值进行比较,仅当本地值较大时才替换共享值。
c# - 将 Interlocked.CompareExchange 与类一起使用
System.Threading.Interlocked.CompareExchange
运算符提供了比较与交换操作的原子(因此是线程安全的)C# 实现。
例如int i = 5; Interlocked.CompareExchange(ref i, 10, 5);
,在此命令之后,int i 的值 = 10。比较和交换也是原子发生的(单个操作)。
当我尝试将其与类实例一起使用时,比较失败并且未交换值。
现在当我做
比较和交换操作失败。因此,我将 X 类的 Equals 和 == 运算符重写为
所以,现在我得到Interlocked.Equals(a,b)
了true
,但CompareExchange
操作仍然失败。
有什么方法可以做到这一点吗?我想比较两个类实例并根据比较为其中一个分配一个值。