草庐IT

atomic-long

全部标签

c++ - 无法将 'vector<unsigned long>' 转换为 Python 对象

我正在尝试用签名包装一个C++函数vectorOptimized_Eratosthenes_sieve(unsignedlongmax)使用赛通。我有一个包含函数的文件sieve.h,一个静态库sieve.a和我的setup.py如下:fromdistutils.coreimportsetupfromdistutils.extensionimportExtensionfromCython.Distutilsimportbuild_extext_modules=[Extension("sieve",["sieve.pyx"],language='c++',extra_objects=["

c++ - GCCs atomic builtins - 支持哪些处理器

Thisdocument说:Notalloperationsaresupportedbyalltargetprocessors.有人知道哪个处理器支持哪个操作吗? 最佳答案 不是直接的答案,但链接页面中的以下片段提供了线索(重点是我的):Notalloperationsaresupportedbyalltargetprocessors.Ifaparticularoperationcannotbeimplementedonthetargetprocessor,awarningwillbegeneratedandacallanexter

c++ - 为什么 weak_ptr 没有 atomic_{store,load}?

为什么C++标准包含atomic_store或atomic_load重载shared_ptr而不是weak_ptr?这只是一个疏忽,还是有没有为weak_ptr提供原子操作的实际原因? 最佳答案 这似乎是一个疏忽。HerbSutter为atomic_shared_ptr/atomic_unique_ptr/atomic_weak_ptr提出了一个C++(17?)标准设计提案,该文档还解释了现有方法的缺点,其中包含用于shared_ptr的免费函数atomic_load/atomic_store:http://www.open-std

c++ - std::atomic 不受 clang 支持?

我正在尝试将std::atomic与clang一起使用。但是,每当我尝试包含头文件原子(#include)时,我都会收到消息“找不到原子”。请注意,我包括-std=c++11-stdlib=libc++编译时。我错过了什么?我使用的clang版本是3.2。 最佳答案 TheversionofclangI'musingis3.2.Clang根据LLVMCXXStatus添加了跨两个不同版本的原子支持.第一个是Clang3.1,第二个是Clang3.2。我认为您可以使用以下方式检查它:#ifdefined(__clang__)#if__

c++ - std::atomic 访问是否作为内存屏障?

编译器能否对原子指令重新排序,或者原子指令是否充当内存屏障?再说一遍,写在原子指令之后的指令能在原子指令之前执行吗?请看下面的代码。如果useMapA=false在mapB更新和读取线程开始之前移动,我们将使用无效的mapB。注意:更新线程每15分钟才发生一次,因此我们有一个非常好的结构化流程,以及避免使用昂贵的锁定调用的方法!std::atomicuseMapA;std::mapmapA,mapB;publicvoidupdateMap(map*latestMap){if(useMapA){mapB=std::move(*latestMap);useMapA=false;}else{

c++ - float、double 和 long double 是否有保证的最小精度?

从我之前的问题“Isfloatingpointprecisionmutableorinvariant?”我收到了一个response其中说,CprovidesDBL_DIG,DBL_DECIMAL_DIG,andtheirfloatandlongdoublecounterparts.DBL_DIGindicatestheminimumrelativedecimalprecision.DBL_DECIMAL_DIGcanbethoughtofasthemaximumrelativedecimalprecision.我查看了这些宏。它们位于标题中。.来自cplusplusreference

c++ - 模板参数可以同时是 int 和 unsigned long 吗?

我有以下代码:#includetemplateclassA{};templateclassB;templateclassB>{};intmain(){B>b;return0;}在这里,B被模板化为int而A被模板化为size_t,它是一个unsignedlong我正在使用的两个编译器。当我使用编译器1(当前编译器)时,一切都按照我期望的方式编译和工作。当使用编译器2(我们正在转向的编译器)时,我收到一个编译器错误,指出B没有采用unsignedlong的模板特化-它已解释3作为unsignedlong因为它需要是A的一个,但是对于B。修复很明显,-只需更改B也采用size_t(或更改A

c++ - 使用 std::atomic::compare_exchange_strong 时,对 std::atomic 的写入是否会被其他线程看不到?

std::atomicg_atomic;voidthread0(){intoldVal=0;intnewVal=1;while(g_atomic.compare_exchange_strong(oldVal,newVal,std::memory_order_acq_rel,std::memory_order_acquire)){//forevercountingfrom0to100untilunexpectedvalueappearsoldVal=newVal;newVal=(oldVal+1)%100;};}voidthread1(){//setunexpectedvalueg_at

c++ - 与 std::condition_variable 相比,使用 std::atomic 的方法 wrt 在 C++ 中暂停和恢复 std::thread

这是一个单独的问题,但与我之前提出的问题有关here我正在使用std::thread在我的C++不断轮询某些数据并将其添加到缓冲区的代码。我用C++lambda像这样启动线程:StartMyThread(){thread_running=true;the_thread=std::thread{[this]{while(thread_running){GetData();}}};}thread_running是一个atomic在类头中声明。这是我的GetData功能:GetData(){//Someheavylogic}接下来我还有一个StopMyThread我设置的功能thread_r

c++ - 我可以在 C++ 中仅使用 std::atomic 而不使用 std::mutex 安全地跨线程共享变量吗?

我制作了一个在多核上计算素数的程序。(请忽略该算法并非完全有效,这里将数字0和1视为质数。目的只是练习使用线程。)变量taken(接下来要测试的数字)正在8个线程之间共享。问题是它可以由一个线程递增,紧接着由另一个线程递增,并在它已经递增两次(或更多次)时被它们读取,因此可以跳过一些值,这是一件坏事。我以为它可以通过使用std::atomic_uint作为变量类型来解决,但我显然错了。有什么方法可以在不需要使用std::mutex的情况下解决这个问题,因为我听说它会导致相当大的开销?源代码:#include#include#include#include#include#include