首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我需要std::atomic<bool>还是POD bool就足够了?

std::atomic<bool>和POD bool都可以用于表示布尔类型的变量,但它们在多线程环境下的行为是不同的。

std::atomic<bool>是C++标准库提供的原子类型,用于实现原子操作。它可以保证在多线程环境下对该变量的读写操作是原子的,即不会发生数据竞争。std::atomic<bool>适用于需要在多线程环境下对布尔变量进行原子操作的场景。

POD bool是普通的布尔类型变量,不具备原子操作的特性。在多线程环境下,如果多个线程同时对该变量进行读写操作,可能会导致数据竞争和不确定的结果。因此,如果需要在多线程环境下对布尔变量进行操作,建议使用std::atomic<bool>。

推荐的腾讯云相关产品:

请注意,以上推荐的产品仅为示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MXNet 源码解读系列之一 C++端如何解析NDArray参数文件

首先我们要看 IfThenElse 是什么东西,这里还是看到 io.h 的第 38 到 66行: //! \cond Doxygen_Suppress /*!...Read函数就是调用 Stream 的Read,这里如果读者想再详细了解 Stream 类 Read 函数的工作原理可以自己再去细看,不过对于本文来说,到这里知道了会根据T的字节数读取 内容到dptr里面够了...Ok,现在已经读取完两个数字 header, reserved,然后就是读 NDArray Vector 了,然后这 里还是跳转到,调用 Handler::Read 函数,不过这里和读数字不一样的地方在于...(Stream *strm, const std::vector &data) { IfThenElse::value, PODVectorHandler...bool Read(Stream *strm, std::vector *data) { return IfThenElse::value,

2.7K60
  • c++的ThreadPool,OpenHarmony源码实现版赏析和使用

    前言 c++11虽然加入了线程库thread,然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现。比如备受期待的网络库至今标准库里还没有支持,常用acl或asio替代。...当线程池中的线程都在处理任务时,没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行。 线程池优点 线程本来就是可重用的资源,不需要每次使用时都进行初始化。...(); } bool GetTask(Task &task) { std::lock_guard guard(mutex_);...::atomic &num_; }; void Sleep() { std::mutex needRunMutex; std..., set needRun_ to false, mean that all thread should be terminated */ std::atomic_bool needRun

    77410

    UNIX(多线程):27---多线程并发之原子操作与无锁编程

    (100); std::atomic readyFlag(false); //原子布尔类型,取代互斥量 std::atomic job_shared(0); //两个线程都能修改...标准库还专门提供了一个原子布尔类型std::atomic_flag,不同于所有 std::atomic 的特化,它保证是免锁的,不提供load()与store(val)操作,但提供了test_and_set...无锁编程是基于原子操作的,对基本原子类型的共享访问由load()与store(val)即可保证其并发同步,对抽象复杂类型的共享访问则需要更复杂的CAS来保证其并发同步,并发访问过程只是不使用锁机制了,但还是可以理解为有锁止行为的...对于某个无法实现为一个原子操作的并发访问过程还是需要借助锁机制来实现。...这个对象中有多个变量,怎么知道有没有被改过?聪明的你一定想到了,加个版本号啊。每次修改检查版本号,如果版本号变了,说明改过,就算你还是 A,也不行。

    53220
    领券