草庐IT

objc_setProperty_atomic_copy

全部标签

C++20 constexpr std::copy 运行时优化

cppreference.com说:Inpractice,implementationsofstd::copyavoidmultipleassignmentsandusebulkcopyfunctionssuchasstd::memmoveifthevaluetypeisTriviallyCopyable但是,该页面还指出,从C++20开始,不采用执行策略的重载将是constexpr。标准会禁止这些运行时优化(因为std::memmove不是constexpr)还是有办法为运行时优化constexpr函数? 最佳答案 我们也可以吃蛋

c++ - 带有自定义类的 std::atomic (C++ 11)

我在我的库中使用带有自定义类的std::atomic。MSVC一切正常,但现在我试图让它在macOS上运行,我得到一个链接器错误:架构x86_64的undefinedsymbol:“__atomic_store”,引用自:_maininmain.o我创建了一些测试代码来复制它#include#includeusingnamespacestd;classVec{public:intx,y,z;Vec(){x=y=z=0;}};std::atomicx;intmain(){Veca;x=a;cin.get();return0;}当然这个例子没有多大意义,但它是我能想到的最短的例子。它确实在

C++ : Implementing copy constructor and copy assignment operator

在阅读了C++中的复制构造函数和复制赋值运算符之后,我尝试创建一个简单的示例。虽然下面的代码片段显然有效,但我不确定我是否以正确的方式实现了复制构造函数和复制赋值运算符。您能否指出是否有任何错误/改进或更好的示例来理解相关概念。classFoobase{intbInt;public:Foobase(){}Foobase(intb){bInt=b;}intGetValue(){returnbInt;}intSetValue(constint&val){bInt=val;}};classFoobar{intvar;Foobase*base;public:Foobar(){}Foobar(i

c++ - 为什么 std::atomic 初始化不进行原子释放,以便其他线程可以看到初始化值?

在proposedboost::concurrent_unordered_map的线程清理过程中出现了一些非常奇怪的情况并且是recountedatthisblogpost.简而言之,bucket_type是这样的:structbucket_type_impl{spinlocklock;//=2ifyouneedtoreloadthebucketlistatomiccount;//countisuseditemsintherestd::vectoritems;bucket_type_impl():count(0),items(0){}...然而线程清理器声称在bucket_type的构

c++ - 我可以制作一个线程安全的 std::atomic<vector<int>> 吗?

我有一个需要执行的函数n=1000次。此函数执行蒙特卡罗风格模拟并返回int作为结果。我想运行nthreads=4在平行下。每当一个线程完成一个循环时,它应该将结果放在std::vector中。.因此,经过1000个循环后,我的vector为1000int可以通过统计来检验。自从std::vector不是线程安全的,我想到了std::mutex(这肯定会奏效)。但我想知道我是否可以将vector声明为原子的,从而绕过互斥锁?是否有可能拥有std::atomic>?我可以使用push_back等等? 最佳答案 C++11§29.5/1

c++ - OpenCV/C++ : Copying a row/column in a Mat to another?

我知道我可以通过自己复制每个元素来做到这一点,但是有没有一种方法可以为我做到这一点?我试过mat2.copyTo(mat1.row(0))但这不起作用。 最佳答案 试试Matmat1row=mat1.row(0);mat2.copyTo(mat1row);(假设mat2与目标行的大小相同)。这应该可以完成工作并且更清晰。编辑:这更短,官方文档推荐:A.row(j).copyTo(A.row(i));在官方文档中有更多详细信息:http://docs.opencv.org/modules/core/doc/basic_structur

c++ - std::atomic_compare_exchange_weak 是线程不安全的设计吗?

它是在cppreferenceatomic_compare_exchangeTalkpage上提出的std::atomic_compare_exchange_weak的现有实现使用非原子比较指令计算CAS的bool结果,例如lockcmpxchgq%rcx,(%rsp)cmpq%rdx,%raxwhich(编辑:为红鲱鱼道歉)breakCAS循环,例如ConcurrencyinAction的list7.2:while(!head.compare_exchange_weak(new_node->next,new_node);规范(29.6.5[atomics.types.operatio

c++ - 如何使用 std::copy 将一张 map 复制到另一张 map 中?

我想将一个std::map的内容复制到另一个。我可以使用std::copy为了那个原因?显然,下面的代码是行不通的:intmain(){typedefstd::mapMap;Mapm1;m1[3]=0.3;m1[5]=0.5;Mapm2;m2[1]=0.1;std::copy(m1.begin(),m1.end(),m2.begin());return0;}这行不通,因为copy将调用operator*在m2.begin()“取消引用”它并分配一个值(所有值的类型都是std::pair)。然后它会调用operator++移动到m2中的下一个空格.由于const,这两个操作都不起作用在c

c++ - 为什么 std::copy_n 不增加输入迭代器 n 次?

我希望下面的buf_iter指向字符n字符在它开始的点之后。相反,它指向最后一个读取的字符。为什么是这样?即,如果我在copy_n之前和之后执行in_stream.tellg(),它们的区别不是n而是(n-1)。如果我用in_stream.read读取了n个字符,那么该位置将前进n。std::istreambuf_iteratorbuf_iter(in_stream);std::copy_n(buf_iter,n,sym.begin());我查看了实现,它显然是故意这样做的,跳过了最后的增量。另一篇文章here提到当从迭代器连接到cin时递增它会导致读取次数过多,因为读取是在opera

c++ - "atomic object"的定义

在C和C++的标准术语中,短语“atomicobject”表示“atomic类型的object,”不是吗?没有标准会明确定义每一个两个词的短语,因此C和C++标准省略了对这一短语的明确定义并没有错。尽管如此,当我阅读C++17标准(草案here)时,第17节4.7.1(4),“对特定原子对象M的所有修改都以某个特定的总顺序发生,称为M修改顺序>”——当标准反复使用类似的语言来界定更精确的并发逻辑时——我想确定我不是无意中误解了。我是否正确地假设“原子对象”这个短语的意思是原子类型的对象?我能想象的唯一可能的选择是这个短语的意思正确对齐的对象足够小,硬件可以自动处理它。请问是哪个?(注意