bool是啥类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bool是啥类型?相关的知识,希望对你有一定的参考价值。

参考技术A

bool是布尔类型用作逻辑判断。

bool表示布尔型变量,也就是逻辑型变量的定义符,以英国数学家、布尔代数的奠基人乔治·布尔命名。bool类似于float,double等,只不过float定义浮点型,double定义双精度浮点型。 在objective-c中提供了相似的类型BOOL,它具有YES值和NO值;在java中则对应于boolean类型。

名词解释:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

提供 undetermined-lifespan bool 在线程之间共享的最简单方法是啥?

【中文标题】提供 undetermined-lifespan bool 在线程之间共享的最简单方法是啥?【英文标题】:What is the easiest way to provide an undetermined-lifespan bool to share between threads?提供 undetermined-lifespan bool 在线程之间共享的最简单方法是什么? 【发布时间】:2016-08-23 09:47:49 【问题描述】:

如果我想在线程之间共享一些 bool 标志,并且由于 thread1、thread2、... 可能是最后一个使用它的线程,我的生命周期不清楚,我该如何提供这样的类型?

我显然可以拥有一个带有互斥锁的shared_ptr<bool> 来同步对它的访问。但是,如果没有shared_ptr,我只会使用atomic<bool>,因为它可以完成这项工作。

现在,我可以使用shared_ptr<atomic<bool>> 将这两个概念结合起来吗?

如果不是,那么在线程之间共享未确定寿命bool 的最简单方法是什么?是互斥体吗?

可能有必要说我的系统中有多个作业,并且我想为每个作业提供一个共享的中止标志。如果工作已经完成,那么一些想要中止线程的线程在尝试设置标志时不应该崩溃。如果喜欢中止作业的线程没有保留标志(或 shared_ptr),那么线程应该仍然能够读取标志而不会崩溃。但是,如果不再有线程使用 bool,内存应该自然释放。

【问题讨论】:

全局std::atomic<bool> 有什么问题?您并没有真正提供足够的上下文来获得更好的答案。 @RichardCritten 我在最后添加了一个段落,给出了一个动机......简而言之:我有很多bools,如果没有人再使用它,应该释放内存 【参考方案1】:

一旦你创建了你的 atomic bool:

std::shared_ptr<std::atomic<bool>> flag = std::make_shared<std::atomic<bool>>(false /*or true*/);

在线程之间使用它应该没问题。 std::shared_ptr 上的引用计数和内存释放是线程安全的。

另一件可能感兴趣的事情是,如果您希望某些线程选择退出引用计数,那么您可以使用:

std::weak_ptr<std::atomic<bool>> weak_flag = flag;

...

std::shared_ptr<std::atomic<bool>> temporary_flag = weak_flag.lock();

if (temporary_flag != nullptr)

   // you now have safe access to the allocated std::atomic<bool> and it cannot go out of scope while you are using it


// now let temporary_flag go out of scope to release your temporary reference count

【讨论】:

我说过引用计数和内存释放是线程安全的。也就是说,你真的很关心底层对象的线程安全,你可以通过适当地使用 shared_ptr 来正确处理这个问题。 shared_ptr 是“线程安全的”,只要您将它的副本(或通过weak_ptr 分配给副本)传递给每个线程,即不要从不同线程访问 同一个实例,请参阅@ 987654321@ 啊,我明白了。我什至不会想到只传递 shared_ptr 的引用。但是,该线程似乎说内容在任何情况下都不是线程安全的?! ***.com/questions/9127816/… 如果将 shared_ptr& 传递给每个线程,那不是线程安全的,而是为每个线程分配一个新的 shared_ptr(通过复制构造函数),那么 shared_ptr 是线程安全的,但是被共享的对象没有变化到它的线程安全级别,因此也使用 atomic 为了清楚这个评论线程:我发布了一个答案,假设 `std::shared_ptr> 不是线程安全的,但我错了,所以我删除了答案。

以上是关于bool是啥类型?的主要内容,如果未能解决你的问题,请参考以下文章

bool是啥类型?

bool 数据类型的指针是啥? [复制]

bool在c语言中是啥意思?

在构造 std::variant 时禁用从指针类型到 bool 的隐式转换的最佳方法是啥?

java里的boolean类型的数组是啥意思,怎么把里面的元素有些标为true,有些标为false

:: 在 ::BOOL 中是啥意思?