atomic 相关问题

原子操作是不可分割的。该术语用于描述数据库中的事务,多线程程序中的低级访问以及文件系统操作等。

CUDA中是否有相当于intptr_t和uintptr_t的东西

由于 intptr_t 和 uintptr_t 指的是能够保存主机指针的整数类型,是否有一些可以在设备代码中使用的等效项? 这对于设备端特别有用......

回答 1 投票 0

openmp 原子更新与临界区

顺序循环、临界区、原子更新。 我有一个由顶点和边组成的二维图。 对于每个顶点,我想计算自由度 (dof) 的数量。 顶点自由度 = n...

回答 1 投票 0

_工会的原子成员是个好主意吗?

我在联合内部使用 _Atomic 整数,例如: 联合 dedup_option_seq { 结构体{ uint32_t seq :DEDUP_SHIFT; // 足够的位用于 seq uint32_t not_empty :1; // 反转...

回答 1 投票 0

现代SSD的原子写入单元是什么?

我的理解是,最现代的基于主轴的驱动器都有一个“扇区”作为原子写入单元。现代SSD的单位是什么?

回答 2 投票 0

赋值对于 C11 原子意味着什么?

例如, atomic_int 测试(无效) { atomic_int tmp = ATOMIC_VAR_INIT(14); tmp = 47; // 看起来像atomic_store 原子整型MC; // 可能只是未初始化...

回答 1 投票 0

原子操作的内存顺序

我想建立一个关于 std::memory_order_seq_cst、std::memory_order_relaxed、memory_order_acq_rel 的良好心理形象。 将您的代码想象为一系列砖块。每块砖块都是对某些

回答 1 投票 0

Openclatomic_add()函数返回错误值

我在 OpenCL 1.2 中遇到问题。 看,我在内核中有一个 __global 数组,组大小为 1000。 问题是atomic_add() 函数无法正常工作。 我的内核代码是:

回答 1 投票 0

可以将 _Atomic Type * 转换为 void * 并返回吗?

某些库要求回调函数采用 void *(不是 _Atomic void *)。是否可以将 _Atomic Type * 强制转换为 void * 并返回以使用它?就像下面的代码: #包括 某些库需要回调函数采用 void *(而不是 _Atomic void *)。是否可以将 _Atomic Type * 投射到 void * 然后再投射回来使用它?就像下面的代码: #include <stdio.h> int Call(int(*f)(void*), void *arg){ return f(arg); } int Use(void *arg){ return *(_Atomic int *)arg; } _Atomic int g_x; int main(int argc, const char **argv){ g_x = argc; int y = Call(Use, (void*)&g_x); printf("%d\n",y); } C 2018 6.3.2.3 1 说: 指向 void 的指针可以与指向任何对象类型的指针相互转换。指向任何对象类型的指针都可以转换为指向 void 的指针,然后再转换回来;结果应等于原始指针。 因此,仅将指针转换为 void * 并返回是没有问题的;该行为由 C 标准定义。此转换规范不会以任何方式限制原子类型。 有关原子类型的属性适用于访问原子对象。 (特别是,C 2018 6.7.2.4 4 说“与原子类型关联的属性仅对左值表达式有意义......”)只要 void * 不用于通过某些非原子类型访问对象,它对对象的使用没有影响。

回答 1 投票 0

std::atomic<std::shared_ptr<Struct Demo>> 是否可以安全地与 C++11 一起使用,因为所述部分特化仅适用于 C++20?

根据文件,[强调我的]: 定义在头文件中 模板< class T > 结构原子; 模板< class U > 结构原子; (自 C++11 起) 定义在头文件中

回答 1 投票 0

如何从x86_64 CPU生成PCIe原子请求?

PCIe 3.0支持原子操作请求(FetchAdd、Swap、CAS)。 我尝试使用内存模型感知原子操作的内置函数从主机生成 PCIe 原子操作请求,但是...

回答 1 投票 0

使用异步任务排队进行原子数据库写入

如今,(在微服务架构中)将面向用户的逻辑(同步部分)与后端处理(异步部分)分开,以提高服务吞吐量、可靠性和用户体验是一种常见的做法

回答 1 投票 0

如何在一个原子操作中结合比较和更新?

我有两个线程,将执行: _原子易失性 uint64_t foo; // 如果更新了 foo,则返回 1;如果foo 已经有了新值,则返回 0 int try_to_update_foo(uint64_t new) { 如果(富< n...

回答 1 投票 0

如何使用std::atomic实现指向整数的指针的原子增量?

在将一些 Windows C++ 代码移植到 iOS 时,我需要提供 Win32 的 long InterlockedIncrement(long *p) 调用的实现。使用中定义的函数这很容易 将一些 Windows C++ 代码移植到 iOS 时,我需要提供 Win32 的 long InterlockedIncrement(long *p) 调用的实现。使用 <libkern/OSAtomic.h> 中定义的函数很容易做到这一点。 但是,我想知道是否可以仅使用 C++11 工具以与操作系统无关的方式编写它,主要是 <atomic>。我想出了这个,但我不确定它是否能实现我想要的: inline long InterlockedIncrement(long* p) { std::atomic<long&> atomicP(*p); return ++atomicP; } 这个有用吗?这样就够了吗?这两行不是原子的,但增量应该是原子的,这是这里的关键。 我发现的所有 <atomic> 的使用示例都不同,其中 std::atomic<T> 是直接定义和使用的。在这里,我想使用调用者通过地址传递给我的现有长变量。我找不到这样的例子。 编辑:Clang 3.2(在 Xcode 4.x 中)无法编译 ++atomicP,并出现错误“无法增加 std::atomic<long&> 类型的值”(也不是 atomicP += 1)。 正确的方法是什么? 再次编辑:指针实现编译... inline long InterlockedIncrement(long* p) { std::atomic<long*> atomicP(p); return ++(*atomicP); } 但是恐怕这不起作用,因为我不增加原子类型,而是增加指针指向的值,这不是原子的。 您的示例实现是每次从指针构造一个新的原子。这不是 std::atomic 的预期用途,我不相信它会按照您想要的方式工作。 据我所知,完成您想要做的事情的唯一方法(以独立于平台的方式消除对 InterlockedIncrement 的依赖)是用 std::atomic 替换您当前调用 Win32“互锁”调用的变量的所有声明它们的版本。然后,您可以删除互锁调用并使用常规值语义以原子方式修改变量。无论如何,这更具可读性(并且将来更易于维护)。 我知道您希望保留现有的(经过充分测试的)代码,但我认为您不能在您的情况下这样做。 __atomic_add_fetch GCC 扩展 在GCC 4.8中,C++标准库通过GCC内置的std::atomic::operator++实现了__atomic_add_fetch,所以你可以写: inline long InterlockedIncrement(long* p) { return __atomic_add_fetch(p, 1, __ATOMIC_SEQ_CST); } 我不确定 clang,但似乎有一些选项,例如 __c11_atomic_fetch_add http://clang.llvm.org/docs/LanguageExtensions.html 正如其他人提到的,参数 p 本身必须是 std::atomic 才能仅使用标准库方法:将指针转换为原子并没有帮助,因为原子指针仅作用于指针,而不作用于它的对象指向。 我相信你可以使用atomic_fetch_add操作。看一下示例这里。

回答 3 投票 0

gcc 中线程安全的原子操作

在我工作的一个程序中,我有很多代码如下: pthread_mutex_lock( &frame->mutex ); 框架->变量=变量; pthread_mutex_unlock( &frame->mutex ); 这分明是...

回答 5 投票 0

原子操作需要硬件支持吗?

最近在阅读无锁编程时,遇到了“原子操作”。我开始深入研究它。所有链接都解释了如何编写原子操作及其用法...

回答 2 投票 0

标准库中是否支持CAS等无锁操作?

我正在使用原子(双)比较和交换指令实现无锁机制,例如cmpxchg16b 我目前正在汇编中编写此内容,然后将其链接到其中。但是,我想知道是否...

回答 2 投票 0

原子变量是无锁的吗?

当我们谈论原子变量时,比如C++11的atomic<>,它是无锁的吗?或者无锁有什么不同?如果我用原子变量管理队列,会比锁慢吗-

回答 2 投票 0

理解 C++ 的 std::atomic<T> 和比较与交换

我的理解是比较和交换是由硬件支持的,例如x86架构中的CMPXCHG。我有以下两个困惑: 难道C++的atomic没有“实现&

回答 1 投票 0

在 Dart 中使添加+删除操作原子化

我使用 fl_chart 来显示实时数据,该数据每 0.5 秒就会出现在我的图形小部件中。 它需要一个点列表,在我的例子中,该列表的大小应限制为 120 个元素。 新值是

回答 1 投票 0

使用 mongodb 的有界原子计数器

我试图设计一个简单的有界原子计数器,想知道我的想法是否正确。 Mongodb 有一个名为 findAndModify() 的操作。此操作需要一个查询。如果查询是

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.