bool是啥类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bool是啥类型?相关的知识,希望对你有一定的参考价值。
参考技术Abool是布尔类型用作逻辑判断。
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 我在最后添加了一个段落,给出了一个动机......简而言之:我有很多bool
s,如果没有人再使用它,应该释放内存
【参考方案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以上是关于bool是啥类型?的主要内容,如果未能解决你的问题,请参考以下文章
在构造 std::variant 时禁用从指针类型到 bool 的隐式转换的最佳方法是啥?