草庐IT

objc_setProperty_atomic_copy

全部标签

c++ - 如何使用 std::atomic<>

我有一个想在不同线程中使用的类,我想我可以通过这种方式使用std::atomic:classA{intx;public:A(){x=0;}voidAdd(){x++;}voidSub(){x--;}};在我的代码中:std::atomica;在不同的线程中:a.Add();和a.Sub();但我收到一个错误,即a.Add()未知。我该如何解决这个问题?有没有更好的方法来做到这一点?请注意,这是一个示例,我想要确保对A类的访问是线程安全的,所以我不能使用std::atomicx;如何使用std::atomic使类线程安全? 最佳答案

java - Java、C++、Python 和 ObjC 的在线编译器/运行时?

已结束。此问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,describetheproblem以及到目前为止为解决这个问题所做的工作。关闭9年前。Improvethisquestion有人知道我可以在网络上访问的好的在线编译器/运行时(用于C++、Java、Python、ObjC等)吗?我正在寻找可以让我在网络表单中输入程序并运行该程序并在线查看结果的东西。(我们暂时不讨论为什么。现在我只想说我并不总是可以访问编

c++ - C++11 atomic<T> 可以与 mmap 一起使用吗?

我想为Linux嵌入式系统上运行的服务(守护程序)使用的少数参数添加网络控制。不需要过程调用,每个参数都可以以非常自然的方式轮询。共享内存似乎是一种很好的方式,可以将网络代码排除在守护进程之外,并将共享访问限制为一组经过精心控制的变量。由于我不希望部分写入导致从未写入的值的可见性,我正在考虑使用std::atomic和std::atomic.但是,我担心std::atomic可能以仅适用于C++11线程而不适用于多个进程的方式实现(可能甚至不适用于OS线程)。具体来说,如果实现使用存储在共享内存块之外的任何数据结构,在多进程场景中这将失败。我确实看到了一些要求std::atomic不会

c++ - 什么是复制省略,它如何优化 copy-and-swap 的习惯用法?

我正在阅读CopyandSwap.我尝试阅读有关CopyElision的一些链接,但无法正确理解其含义。有人可以解释一下这个优化是什么,尤其是下面的文字是什么意思Thisisnotjustamatterofconveniencebutinfactanoptimization.Iftheparameter(s)bindstoalvalue(anothernon-constobject),acopyoftheobjectismadeautomaticallywhilecreatingtheparameter(s).However,whensbindstoarvalue(temporaryo

c++ - 与 `std::mutex` 同步是否比与 `std::atomic(memory_order_seq_cst)` 慢?

在互斥体上使用原子的主要原因是互斥体很昂贵,但是atomics的默认内存模型是memory_order_seq_cst,这不是一样昂贵吗?问题:使用锁的并发程序能否与并发无锁程序一样快?如果是这样,除非我想将memory_order_acq_rel用于原子,否则可能不值得付出努力。编辑:我可能遗漏了一些东西,但基于锁的不能比无锁更快,因为每个锁也必须是一个完整的内存屏障。但是对于无锁,可以使用比内存屏障限制更少的技术。回到我的问题,无锁是否比基于新C++11标准和默认memory_model的锁更快?“以性能衡量时,无锁>=基于锁”是真的吗?假设有2个硬件线程。编辑2:我的问题不是关于

C++ atomic_flag 查询状态

我正在使用C++std::atomic_flag作为一个原子bool标志。将标志设置为真或假不是问题,但是如何在不将其设置为某个值的情况下查询标志的当前状态?我知道有方法'atomic_flag_clear'和'atomic_flag_set'。它们确实会返回以前的状态,但也会修改当前状态。有什么方法可以查询标志状态而不修改它还是我必须使用完整的'std::atomic'。 最佳答案 您无法读取std::atomic_flag的值不将其设置为true.这是设计使然。它不是一个bool变量(我们有std::atomic),而是一个保证

c++ - 仅编译器的内存屏障(例如 std::atomic_signal_fence)何时有用?

编译器栅栏的概念经常在我阅读有关内存模型、障碍、排序、原子等方面的内容时出现,但通常它也是在的上下文中正如人们所期望的那样,em>与CPU围栏配对。不过,我偶尔会读到仅适用于编译器的栅栏结构。这方面的一个例子是C++11std::atomic_signal_fence函数,它声明为cppreference.com:std::atomic_signal_fenceisequivalenttostd::atomic_thread_fence,exceptnoCPUinstructionsformemoryorderingareissued.Onlyreorderingoftheinstru

c++ - 为什么 std::atomic<bool> 比 volatile bool 慢得多?

多年来我一直在使用volatilebool进行线程执行控制,效果很好//inmyclassdeclarationvolatileboolstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}现在,由于C++11增加了对原子操作的支持,我决定尝试一下//inmyclassdeclarationstd::atomicstop_;-----------------//Inthethreadfunctionwhile(!stop_){do_things();}但它比volatilebool慢几个数量级!我编

c++ - 如何有效地将 std::atomic<> 用于非原始类型?

Thedefinitionsforstd::atomic似乎对原始类型或POD类型显示出明显的用处。你什么时候会用它来上课?什么时候应该避免在类里面使用它? 最佳答案 操作std::atomic在任何可简单复制的类型上可用是非常基本的。你可以build和摧毁atomic,你可以询问类型is_lock_free(),您可以加载和存储T的拷贝,您可以交换T的值以各种方式。如果这足以满足您的目的,那么您最好这样做而不是持有显式锁定。如果这些操作还不够,例如,如果您需要直接对值自动执行序列操作,或者如果对象足够大以至于复制成本很高,那么您可

c++ - 复制 std::vector:更喜欢赋值还是 std::copy?

我有两个vector:std::vectorv1,v2;//Fillingv1...现在我需要将v1复制到v2。有什么理由更喜欢v2=v1;到std::copy(v1.begin(),v1.end(),v2.begin());(反之亦然)? 最佳答案 通常我更喜欢v2=v1:更短,意图更清晰如果v2的长度与v1的长度不同,则std::copy将不起作用(它不会调整它的大小,所以它会保留一些旧元素的最佳情况(v2.size()>v1.size()并覆盖程序最坏情况中其他地方使用的一些随机数据如果v1即将到期(并且您使用C++11),您