草庐IT

atomic_compare_exchange_weak

全部标签

c++ - 实际上,C++11 中 std::atomic 的内存占用是多少?

我正在编写的一个程序需要在ram中存储大量数据(几千兆字节)以供多个线程原子访问。std::atomic似乎是一种合理的方式来做到这一点,因为它的访问可能比将所有访问包装在一个或多个std::mutex中更有效。s,因为,最坏的情况下,它将在内部使用互斥量并且是等效的。我的数据组织为一组Chunk对象,除其他外,它们有一个包含大部分数据的数组成员。现在,我正在考虑将其定义为std::array,SOME_CONSTANT_HERE>,但这只有在内存占用为std::atomic时才会有效在内置类型上,例如unsignedint不比unsignedint差本身,因为根据我的计算,以我需要存

不到1s生成mesh! 高效文生3D框架AToM

论文题目:AToM:AmortizedText-to-Meshusing2DDiffusion论文链接: https://arxiv.org/abs/2402.00867 项目主页: AToM:AmortizedText-to-Meshusing2DDiffusion随着AIGC的爆火,生成式人工智能在3D领域也实现了非常显著的效果,但是现有的文生3D模型仍然存在很多局限,例如主流的文生3D方法需要逐文本优化(per-promptoptimization),生成过程非常耗时。此外,这些方法的可扩展性仍有待提高,对于训练分布之外的未见文本(unseenprompt),模型无法生成。本文介绍一篇来

c++ - 对象 std::shared_ptr 是否可以通过它的 std::weak_ptr 找到?

所以我有一个std::vector>myListOfT;我有一个std::weak_ptrptrToOneT;它是从用于填充该容器的指针之一创建的(假设我将它放在回调函数中)。威尔std::find在那个容器和我的weak_ptr给我一个原始shared_ptr的迭代器(如果集合中存在这样的一个)?它是在标准的某处得到保证还是依赖于此实现? 最佳答案 通过使用std::weak_ptr::owner_before,我们可以不锁定weak_ptr。我将使用比必要的稍微冗长的解决方案并引入owner_equal,它与std::owner

c++ - 实现 atomic *= 的不同方式

通过一本书学习,它解释了如何实现更复杂的操作,如operator*对于std::atomic.实现使用compare_exchange_weak我想我明白这是怎么回事了。现在,我自己实现了一些东西,看看吧。#include#include#include/*template::value>>std::atomic&operator*=(std::atomic&t1,Tt2){Texpected=t1.load();while(!t1.compare_exchange_weak(expected,expected*t2)){}returnt1;}*/template::value>>st

c++ - 将 C++0x 的 atomic<int> 作为非原子访问

我的程序中有一个atomic类型的原子变量.在某些地方,我不需要以原子方式访问其中的值,因为我只检查它是否为0。换句话说,在那些情况下,我想避免在有原子访问时发生的总线锁定等开销。如何以非原子方式访问原子变量。使用(int)对其进行类型转换是否足够,如下所示?如果不是,我想我该怎么做?atomicatm;intx;........x=(int)atm;//Wouldthisbeanon-atomicaccess,nobuslockingetall? 最佳答案 您无法摆脱原子性属性。但是您可以通过放宽内存排序保证来减少使用原子变量所涉

c++ - boost::atomic 的 header 是什么

我想使用boost::atomic但要包含什么header?没有boost/atomic.hpp 最佳答案 Boost.Atomic目前还不是boost的官方部分。如果您仍想使用它,则需要从here获取它。.或者你可以试试Boost.Interprocess对于原子操作,依赖编译器相关扩展,如gccs原子操作(__sync_val_compare_and_swap等),或者,如果c++11是一个选项,请使用std::atomic,这几乎与boost::atomic相同IIRC.编辑:一如既往,这些事情发生了变化:Boost.Atom

c++ - 有类似 "default comparator"的东西吗?

我写了一个模板,它包装了一个std::vector以确保vector总是排序:templateclassSortedVector{public:SortedVector(bool(*comparator)(T,T)=DefaultComparator){this->comparator=comparator;}voidinsertValue(TnewElement){vect.insert(std::lower_bound(vect.begin(),vect.end(),newElement,comparator),newElement);}private:std::vectorvec

c++ - Fedora 22 - 编译 - __atomic_is_lock_free

我尝试在Fedora22上编译一个软件(SuperCollider),但我遇到了一个问题:libsupernova.a(server.cpp.o):Infunction`std::atomic::is_lock_free()const':/usr/include/c++/5.1.1/atomic:212:undefinedreferenceto`__atomic_is_lock_free'collect2:error:ldreturned1exitstatusserver/supernova/CMakeFiles/supernova.dir/build.make:96:recipefo

c++ - 构造一个 constexpr std::weak_ptr

根据std::weak_ptr文档可以构造一个constexprweak_ptr:#includeconstexprweak_ptrfoo{};但是,使用clang尝试此操作会产生编译错误,提示constexpr变量不能具有非文字类型'conststd::weak_ptr',这是因为weak_ptr有一个用户提供的析构函数。(确实如此,查看libc++header)我的问题是,这是一个libc++错误,还是做constexprweak_ptr只是没有意义并且拥有constexpr默认构造函数是一个错误?我可以期待它在未来发挥作用吗? 最佳答案

c++ - 为什么 volatile 不是 sig_atomic_t 的一部分

在我的平台(X86、Fedora、gcc9.1.1)上,sig_atomic_t类型定义为普通的int。在C++标准中,sig_atomic_t始终与volatile限定符一起使用。我明白为什么需要volatile,但为什么它不是类型的一部分呢?类似于:usingsig_atomic_t=volatileint; 最佳答案 这是从C继承的。C定义,同时允许sig_atomic_t要volatile合格,不需要它。我看过的标准文档(N1570)中使用的所有示例都以volatilesig_atomic_t的形式给出。.现在使用std:a