atomic相关内容

单个加载是否与多个存储同步?

以下引用自C++ Standard - Memory Order: 如果线程A中的原子存储被标记为MEMORY_ORDER_RELEASE,而线程B中来自同一变量的原子加载被标记为MEMORY_ORDER_ACCENTE,则从线程A的角度来看,在原子存储之前发生的所有内存写入(非原子和松弛原子)在线程B中都成为可见的副作用。也就是说,一旦原子加载完成,线程B将确保看到线程A写入内存的所有内容 ..
发布时间:2022-04-18 10:06:41 C/C++开发

CAS指令如何保证原子性

根据Wiki,CAS这样做: function cas(p : pointer to int, old : int, new : int) returns bool { if *p ≠ old { return false } *p ← new return true } 嗯,在我看来,如果几个处理器将尝试执行带有相同参数的CAS指令,则可 ..
发布时间:2022-04-18 10:04:14 其他开发

什么是C++11原子库与Java的原子库等价物?

需要此调用来实现无锁的链表。 ATOMICMarkableReference是一个来自java.util.concurent.atom包的对象,它封装了对类型T的对象的引用和布尔标记。这些字段可以一起更新,也可以单独更新。 谢谢。 推荐答案 假设对象的对齐大于1,则可以将指针的最后一位用作布尔标记: template class MarkableRefer ..
发布时间:2022-04-18 09:58:04 Java开发

什么是与`__ASM__Volatile(&Quot;";:&Quot;Memory&Quot;)`等价的C++11原子API

代码库具有定义为__asm__ volatile("" ::: "memory")的COMPILER_BARRIER宏。宏的目的是防止编译器跨障碍对读写进行重新排序。请注意,这显然是编译器障碍,不是处理器级内存障碍。 实际上,这是相当可移植的,因为在汇编模板中没有实际的汇编指令,只有volatile和memory装配器。因此,只要编译器支持GCCS扩展ASM语法,它就应该工作得很好。不过,如果可 ..
发布时间:2022-04-18 09:54:51 C/C++开发

需要哪些文件系统操作才能是原子的?

只有unlink、fsync和rename是原子的吗? 编辑:原子表示操作要么成功且有效,要么失败且无效;操作不得失败且有效。 显然,如果内核死机,程序无法处理操作失败的错误,但在这种情况下,它必须认为它确实失败了 推荐答案 我不确定fsync(2)是原子的;如果一个文件在缓冲区缓存中有100兆字节的脏数据,则需要几秒钟才能将该数据写出,并且内核可能会在传输到磁盘的过程中崩 ..
发布时间:2022-04-18 09:51:00 其他开发

用MSVC实现C语言中的原子加载

TL;DR:我需要与C11的atomic_load相当的Microsoft C(而不是C++)。有人知道什么是正确的功能吗? 我有一些使用原子的非常标准的代码。类似于 do { bar = atomic_load(&foo); baz = some_stuff(bar); } while (!atomic_compare_exchange_weak(&foo, &bar, ba ..
发布时间:2022-04-18 09:48:37 其他开发

Cuda原子导致分支分歧

我正在开发一个CUDA内核来计算图像的直方图(NVIDIA GTX 480)。我注意到,使用Cuda剖析器发现了82.2%的分支分歧。分析器将以下函数指示为分歧的来源,该函数位于名为DEVICE_Functions.h的文件中(尤其是包含RETURN语句的那一行)。 static __forceinline__ unsigned int __uAtomicAdd(unsigned int * ..
发布时间:2022-04-18 09:46:26 其他开发

MongoDB中updateOne胜过findOneAndUpdate的用例

我认为findOneAndUpdate执行原子操作,所以我假定updateOne不执行。 为什么选择updateOne而不是findOneAndUpdate并避免原子操作,并且必须花费额外的时间检查更新是否是原子的? 我希望能有一些见解或用例。 推荐答案 我认为findOneAndUpdate执行原子操作,所以我假定updateOne不执行。 您为什么这么想? ..
发布时间:2022-04-18 09:40:18 其他开发

SWIFT 3:原子比较交换强

在Xcode 8/SWIFT 3中收到以下警告: warning: 'OSAtomicCompareAndSwap32Barrier' was deprecated in OS X 10.12: Use atomic_compare_exchange_strong() from instead 尝试在SWIFT代码中使用函数atomic_co ..
发布时间:2022-04-18 09:38:26 移动开发

C++的双重检查锁有什么潜在的问题吗?

这里有一个用于演示的简单代码片段。 有人告诉我复查锁是不正确的。由于变量是非易失性的,编译器可以自由地对调用重新排序或对其进行优化(有关详细信息,请参阅codereview.stackexchange.com/a/266302/226000). 但我真的看到这样的代码片段确实在许多项目中使用。有谁能解释一下这件事吗?我用谷歌搜索了一下,和朋友们聊了聊,但我仍然找不到答案。 #in ..
发布时间:2022-04-08 22:56:51 C/C++开发

何时在多线程中使用 volatile?

如果有两个线程访问一个全局变量,那么许多教程都说使变量 volatile 以防止编译器将变量缓存在寄存器中,从而无法正确更新.然而,两个线程都访问一个共享变量是需要通过互斥锁进行保护的东西,不是吗?但是在这种情况下,在线程锁定和释放互斥锁之间,代码处于一个关键部分,只有一个线程可以访问变量,在这种情况下,变量不需要是易失的? 那么,多线程程序中 volatile 的用途/目的是什么? ..
发布时间:2022-01-30 16:01:39 C/C++开发