草庐IT

atomic_release

全部标签

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++ - 为什么每次成功的 QueryInterface() 调用之后都是 Release() 调用?

为什么QueryInterface()调用总是跟在Release()调用之后?例如,我在MSDN上看到了如下示例代码:HRESULThr=S_OK;CDecoder*pObj=newCDecoder(&hr);if(SUCCEEDED(hr)){*ppv=NULL;hr=pObj->QueryInterface(riid,ppv);}pObj->Release();returnhr;有人可以在这里解释Release()调用背后的意图吗? 最佳答案 虽然这很常见,但并不总是像这样直接跟随。COM对象是引用计数的。当您最初创建该对象时,

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 最佳答案

java - Maven 编译错误 : Fatal error compiling: invalid target release: 1. 8

与Fatalerrorcompiling:invalidtargetrelease:1.8->[Help1]中发布的类似问题但是,在我使用解决方案检查我的设置后,问题并没有解决。详情如下。Maven错误信息是:[ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.2:compile(default-compile)onproject:Fatalerrorcompiling:invalidtargetrelease:1.8->[Help1]我的JAVA_HOME设置是:C:\ProgramFi

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

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

windows - Delphi 10.2 for Win64 Release Target 下的 FillChar 和 StringOfChar

我对Delphi10.2Pascal编程语言中的特定编程问题有疑问。StringOfChar和FillChar在2012年之前发布的CPU上的Win64版本构建下无法正常工作。FillChar的预期结果只是在给定内存缓冲区中重复8位字符的普通序列。StringOfChar的预期结果相同,但结果存储在字符串类型中。但实际上,当我使用10.2版本的Delphi编译在10.2之前的Delphi中运行的应用程序时,我们为Win64编译的应用程序在2012年之前发布的CPU上无法正常运行。StringOfChar和FillChar不能正常工作——它们返回一个由不同字符组成的字符串,尽管是重复的模

windows - 如何在cmake中将构建类型更改为 Release模式?

我正在尝试在Release模式下构建项目。默认情况下,它是在Debug模式下构建的。我在CMakeLists.txt中将变量CMAKE_BUILD_TYPE设置为“Release”。但它仍在以Debug模式构建项目。当我在CMake命令中将“Release”作为构建类型传递时,它仍然不起作用。我使用的CMake命令是:cmake-G"VisualStudio10"-DCMAKE_BUILD_TYPE=Release-H"source_path"-B"Buildpath"如果有解决办法请提供。 最佳答案 要更改构建类型,在Window