atomic 相关问题

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


is_lock_free()是否对某些数据类型返回true,而对另一种数据类型返回false?

我知道is_lock_free取决于硬件,但是当我在ADT上使用它时,它使用int类型返回false但为true。怎么会这样#include #include struct ...

回答 1 投票 0

用ASP.NET Core Web-Api中的Interlocked.Exchange(ref oldValue,newValue)替换不可变数据结构是否安全

我有一个api,它是地理坐标请求的终点。这意味着用户可以搜索其区域中的特定位置。同时可以添加新位置。以...

回答 1 投票 4

此线程安全字节序列生成器怎么了?

我需要一个字节生成器,它将生成从Byte.MIN_VALUE到Byte.MAX_VALUE的值。达到MAX_VALUE时,应从MIN_VALUE重新开始。我已经使用...

回答 6 投票 7

Clang不内联std :: atomic :: load以加载64位结构

请考虑以下代码,该代码使用std :: atomic自动加载64位对象。 #include struct A {int32_t x,y; };一个f(std :: atomic & a) { return a....

回答 2 投票 2


std :: atomic std :: memory_order for std :: atomic :: wait 根据cppreference,在C ++ 20中,wait中有notify_one,notify_all,std::atomic<T>。看起来它们使std::atomic<T>可用作 futex 。 我问为什么wait接受std :: memory_order作为参数。由于我总是需要检查从等待唤醒是否不是虚假的,因此我将在相应的负载中指定内存顺序: std::atomic<bool> x; while (x.load(std::memory_order_acquire) == false) { x.wait(false, std::memory_order_acquire); } 还是我应该指定std::memory_order_relaxed等待?是否存在wait后面没有load的情况? 根据cppreference,在C ++ 20中,std :: atomic 中有等待,notify_one,notify_all。看起来它们使std :: atomic 可用作futex。我在问为什么要等待接受std :: ... 同一对象上的所有原子操作将始终具有单个顺序,并且其中包含单个线程内的顺序。也就是说,relaxed无法对同一线程内同一对象上的原子操作进行重新排序。 relaxed内存顺序是相对于该特定原子以外的其他内存操作的顺序。因此relaxed可以很好地检查等待本身,但是当您想实际读取原子值中包含[[is]]的释放线程写入的数据时,您将需要一个更强的内存顺序为了确保他们的知名度。因此,如果有必要,您的外循环应使用更合适的条件来获取可见性。 我为此提案将这个问题发布到GitHub,并让a response std :: atomic :: wait打算在带有逻辑的futex上实现,特别是为了掩盖虚假的唤醒。 所以,cppreference.com对此是错误的: 允许这些功能散乱地解除阻塞,即由于值更改或通知以外的原因而返回。 虽然在我的示例中循环是多余的,但我应该只使用: std::atomic<bool> x; x.wait(false, std::memory_order_acquire);

还是我应该指定std::memory_order_relaxed等待?是否存在wait后面没有load的情况?

回答 2 投票 2

缺少同步时的轻松原子和内存一致性

我已经编写了一个基本的图形调度程序,以无等待的方式同步任务执行。由于图拓扑是不可变的,因此我想让所有原子操作都放宽。但是,由于我...

回答 1 投票 2

如果通过原子操作进行门控,非原子写入是否可以安全读取?

我想创建一个“空”但可以复杂的数据(这里是a和b),以后可以进行更新,并设置一个原子标志以将其标记为非空,以便可以在其他线程中使用。伪...

回答 1 投票 1

我可以在单读/单写队列中用volatile替换原子吗?

让我们考虑以下使用链接列表实现的单读者/单作者队列。 struct queue {queue(){ta il = head =&reserved; n = 0; } void push(item * it){tail-&...

回答 2 投票 1

回答 1 投票 1

atomic_load和__atomic_load之间的区别?

我不明白atomic_load和__atomic_load有什么区别。有人教我吗?

回答 1 投票 0

原子指令是否涉及内核

我正在阅读此链接以了解Linux的futex。这是我不明白的事情。为了获取锁,可以使用原子测试和设置指令(例如cmpxchg())来执行...

回答 1 投票 1

使用SQL创建原子用户名

我有一个表'users',其中除其他外还有'email'和'username'列。我想确保在创建帐户时,不存在使用相同用户名或电子邮件的帐户(行)。 ...

回答 1 投票 0

cv :: Mat线程安全(原子分配+引用计数)吗?

我正在尝试跨线程共享仅以只读方式使用的图像。通常我用boost :: shared_ptrs来做这种事情,但是由于cv :: Mat已经是一个引用计数了...

回答 2 投票 10

为什么已经使用seq_cst CAS的无锁队列中需要atomic_thread_fence(memory_order_seq_cst)?

无锁队列,只有一个线程执行推入和弹出,其他线程执行窃取。但是,我不明白为什么secret()需要std :: atomic_thread_fence(std :: memory_order_seq_cst)。我认为,steal(...

回答 1 投票 2

用非原子更新原子变量,反之亦然

我正在使用一个线程中的原子变量size_t并从另一个线程中读取它。以下是代码:代码:// MyClass.hpp #pragma一旦#include class MyClass {public:...

回答 1 投票 0

如何在C ++ 11中实现StoreLoad障碍?

我想编写可移植的代码(Intel,ARM,PowerPC ...),它解决了经典问题的一个变体:最初:X = Y = 0线程A:X = 1 if(!Y){做某事}线程B:Y = 1 if(!X){做某事} ...

回答 1 投票 7

Chase-lev deque中的原子存储

我正在基于以下论文实现Chase-lev双端队列:“针对弱内存模型的正确有效的工作窃取”。在本文中,它要求双端队列要有一个包含原子元素的缓冲区:...

回答 1 投票 3

在lambda表达式中使用std :: atomic

我想在lambda表达式中捕获std :: atomic。原子变量的生存期必须与lambda绑定,因此我无法通过引用捕获,但是我想避免堆分配。怎么可以...

回答 1 投票 0

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