草庐IT

atomically

全部标签

c++ - 两个 std::atomic 可以成为一个 union 的一部分吗?

我想这样做:union{std::atomicu128;struct{std::atomicu64_1;std::atomicu64_2;};};多个线程将读取和写入union的两个部分。安全吗?编辑:我使用Linux,x86_64,clang3.3Edit2:我希望能够递增和递减u64_1,读取u64_2,并写入u128(compare_exchange)Edit3:如果我使用atomicbuiltinfunctions会怎么样??union将如下所示:union{uint128_tu128;struct{uint64_tu64_1;uint64_tu64_2;};};u64_1将映

c++ - std::atomic 的默认值是多少?

我发现在实践中,对于各种C++11/C++14编译器,std::atomic有一个未定义的初始值,就像它是一个"生”类型。也就是说,我们期望对于表达式inta;a可以有任何值。对于表达式std::atomicb;b也可以有任何值。换句话说,std::atomicb;//bisundefined不等于std::atomicb{0};//b==0或到std::atomicb{};//b==0因为在后两种情况下,b被初始化为一个已知值。我的问题很简单:在C++11或C++14规范中的什么地方记录了这种行为? 最佳答案 [atomics.t

c++ - std::atomic<uint_least8_t> 行为

在一个系统上:typedefunsignedcharuint8_t;typedefunsignedshortuint16_t;std::atomic::is_always_lock_free//=>falsestd::atomic::is_always_lock_free//=>true据我了解,类型std::atomic将是8位并且不是无锁的。如果是这样,如果我想要一个至少8位且始终无锁的原子类型,我应该怎么写?(假设存在这种类型)是否有比以下更好的选择:std::atomic::is_always_lock_free,uint8_t,uint16_t>::type>(为简单起见,我

c++ - 如何正确使用 std::atomic_signal_fence()?

cppreference.com将此函数记录为“线程与在同一线程中执行的信号处理程序之间的栅栏”。但是网上没找到例子。我想知道以下伪代码是否正确说明了std::atomic_signal_fence()的功能:intn=0;SignalObjects;voidthread_1(){s.wait();std::atomic_signal_fence(std::memory_order_acquire);assert(1==n);//neverfires???}voidthread_2(){n=1;s.signal();}intmain(){std::threadt1(thread_1);

c++ - 为什么 std::mutex 比 std::atomic 快?

我想在多线程模式下将对象放入std::vector中。所以我决定比较两种方法:一种使用std::atomic,另一种使用std::mutex。我看到第二种方法比第一种方法更快。为什么?我使用GCC4.8.1,在我的机器(8线程)上,我看到第一个解决方案需要391502微秒,第二个解决方案需要175689微秒。#include#include#include#include#include#includeintmain(intargc,char*argv[]){constsize_tsize=1000000;std::vectorfirst_result(size);std::vecto

c++ - 是否可以哄 std::atomic<T> 输出 CMPXCHG16B

对于我对在Windowsx64上使用原子互锁操作不感兴趣的类型,是否可以哄骗std::atomic输出CMPXCHG16B,或者我是否只需要接受它并手动执行原子操作?我可以让GCC/Clang在Linux上执行此操作,所以我怀疑这只是Microsoft标准库的问题。structByte16{int64_ta,b;};std::atomicatm;Byte16a={1,2};atm.compare_exchange_strong(...);//ThishasalockonWindows,notonLinuxversionofcode 最佳答案

windows - 那么,Windows Atom 表的用途是什么?

安全界一直在讨论一种称为“原子轰炸”的新代码注入(inject)技术(参见InjectionAttackDescription和InformationSecurityStackExchangeQuestion)。简单地说,攻击者可以使用原子表来存储可执行代码。一个问题是全局原子表功能存在于所有版本的Windows中,并且是一个有意的功能,而不是一个错误。目前尚不清楚如何通过更改Windows来减轻威胁。Windows原子表的用途是什么?如果微软只是说“就是这样,没有更多的原子表”,会有什么影响? 最佳答案 TL;DR:我个人认为微软

C++ 中的原子变量(std::atomic)使用指南

目录C++中的原子变量(std::atomic)使用指南基本概念使用方法创建原子变量读取值修改值原子操作常见应用场景1.计数器2.控制标志3.链表和数据结构示例代码结论C++中的原子变量(std::atomic)使用指南原子变量(std::atomic)是C++中用于多线程编程的强大工具之一。它们提供了一种线程安全的方式来访问和修改共享数据,而无需使用显式的互斥锁。本文将介绍std::atomic的基本概念、使用方法、常见应用场景以及示例代码,适合入门级读者。基本概念原子变量是一种特殊的数据类型,用于执行原子操作。原子操作是不可分割的操作,可以确保在多线程环境中线程安全地执行。C++中的std

mysql - MongoDB 中的 Atomic 转账

我是MongoDB新手我在银行做了一个简单的申请账户。一个账户可以给别人转账我这样设计帐户收集account{name:Aage:24money:100}account{name:Bage:22money:300}假设用户A为用户B转账100$,有2个操作:1)用户A减少100$//文档A的更新2)为用户B增加100$//更新文档B说atomic只申请单文档,不申请多文档。我有一个不同的设计Bank{name:address:Account[{name:Aage:22money:SS},{name:Bage:23money:S1S}]}我有一些问题:IfIuselaterway,How

Win11系统提示缺少msvcp140_atomic_wait.dll文件的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个msvcp140_atomic_wait.dll文件进行安装(前提是找到适合的版本),当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此安装好之后就能重新打开你的软件或游戏了.那么出现msvcp140_atomic_wait.dll丢失要怎么解决?一、手动从本站下载dll文件1、从下面列表下载msvcp140_atomic_wait.dll文件32位文件:msvcp140_atomic_wa