Swift 中设置和读取 Bool 是原子操作吗?

2024-03-29

正如标题所示,很简单。基本上,在这个例子中,我们是否可以获得无效状态:

var myBool = false

// Thread 1
while true {
    if randomEvent() {
        myBool = true
    }
}

// Thread 2
while true {
    if myBool {
        print("Was set to true")
    } else {
        print("Not set")
    }
}

这是否会因为 myBool 处于某种无效状态而崩溃?或者说这“安全”吗?


我不确定你认为这与“线程安全”或“原子”甚至 Swift 有什么关系。多线程的本质如下。每当你说出这种形式的内容时:

if myBool {
    print("Was set to true")

...你应该假设如果myBool可以在另一个线程上设置,可以设置第一行和第二行之间。这可能会导致"Was set to true"即使此刻正在打印false,或者相反可能会导致它not即使此刻正在打印true.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中设置和读取 Bool 是原子操作吗? 的相关文章

  • 僵局澄清?

    也许对 死锁 还有其他解释 但据我所知 当发生死锁时两个线程各自等待一个资源 另一个 所以两者都无法继续 但我在这里看到了几个答案 它们声称长时间的等待 不互相等待 也是一个僵局 例子 1 https stackoverflow com a
  • 在类中使用静态互斥体

    我有一个可以有很多实例的类 它在内部创建并初始化来自第三方库 使用一些全局变量 的一些成员 并且不是线程安全的 我考虑过使用 static boost mutex 它将被锁定在我的类构造函数和析构函数中 因此 在我的线程中创建和销毁实例对于
  • 数百个空闲线程的影响

    我正在考虑使用可能数百个线程来实现通过网络管理设备的任务 这是一个在带有 Linux 内核的 powerpc 处理器上运行的 C 应用程序 在每个任务进行同步以将数据从设备复制到任务的初始阶段之后 任务变得空闲 并且仅在收到警报或需要更改一
  • 在 NodeJS 中处理长时间运行的进程?

    我看过一些较旧的帖子涉及这个主题 但我想知道当前的现代方法是什么 用例是 1 假设您想要在视频文件上执行长时间运行的任务 例如 60 秒长 例如jspm install这最多可能需要 60 秒 2 不能对任务进行细分 其他要求包括 需要知道
  • 跨线程操作无效 VB.NET

    我浏览了该网站 发现与该主题相关的问题是针对 C 的 我正在维护的应用程序是用 VB NET 编写的 因此 如果我忽略了一个问题 我深表歉意 这是我调用我的线程的地方 Private Sub saveBtn Click ByVal send
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • C# 是否可以中断 ThreadPool 内的特定线程?

    假设我已将一个工作项排入队列ThreadPool 但是如果没有要处理的数据 从BlockingQueue 如果队列为空并且队列中不再有工作 那么我必须调用Thread Interrupt方法 如果我想中断阻塞任务 但是如何用 a 做同样的事
  • 如何从 NSOperationQueue 中删除/取消 NSInitationOperation?

    以下两个问题都是在维护 NSOperationQueue 和 NSInvocableOperation 的上下文中提出的 由于我已经使用这个概念来下载多个视频 因此在下载视频完成后 如何从 NSOperationQueue 中删除 释放添加
  • 如何使用 Python 从 Azure Functions 中的辅助线程重定向日志

    我正在使用 Azure 函数运行启动多个线程的 Python 脚本 出于性能原因 一切都按预期工作 但 Azure Functions 日志中仅显示来自 main 线程的信息日志 我在 main 中启动的 辅助 线程中使用的所有日志都不会出
  • 使用具有最大并发进程数的 multiprocessing.Process

    我有Python code from multiprocessing import Process def f name print hello name if name main for i in range 0 MAX PROCESSE
  • 确定范围是否重叠

    给定两个具有整数开始时间和结束时间的事件 E1 s1 e1 E2 s2 e2 实现快速布尔检查以查看事件是否重叠 我有解决方案 但我很想看看其他人想出了什么 编辑 好的 这是我的解决方案 e1 gt s2 s1 gt s2 e2 lt s1
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • 如何管理循环器和线程(线程不再消亡!)

    我创建了一个扩展 Thread 的类 以通过非 ui 线程中的 LocationManager 检索用户位置 我将其实现为一个线程 因为它必须根据请求启动并仅在有限的时间内完成其工作 顺便说一句 我必须在线程中添加一个 Looper 对象
  • 为什么 Python 布尔值占用超过一个字节?

    显然 Python 中整数占用 24 个字节 我可以理解 它这样做是因为代表无限数字的额外花哨 然而 布尔数据类型看起来也花费了高达 24 个字节 尽管它只能表示两个可能值之一 为什么 除了 1 位表示之外 还可能需要存储哪些额外数据Tru
  • 有没有好的带有 TaskExecutor 的 Spring 线程示例? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图了解如何在使用 Spring 进行事务管理的 Java 应用程序中实现线程 我在中找到了 Tas
  • Lockfree 标准集合和教程或文章

    有人知道用于无锁常用数据类型的实现 即源代码 的好资源吗 我正在考虑列表 队列等 锁定实现非常容易找到 但我找不到无锁算法的示例以及 CAS 的工作原理以及如何使用它来实现这些结构 查看 Julian M Bucknall 的博客 他 详细
  • 为什么C++标准库中没有线程池? [复制]

    这个问题在这里已经有答案了 自 C 11 以来 C 中并行 并发编程工具的数量激增 线程 异步函数 并行算法 协程 但是流行的并行编程模式又如何呢 线程池 https en wikipedia org wiki Thread pool 据我
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 当前位置在 Google 地图中不起作用

    我在 swift 3 中集成了谷歌地图 当地图屏幕出现而不显示当前位置时 我在 plist 文件中添加了两个键 并设置了 CLLocationManager delegate 和 requestAlwaysAuthorization cla
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作

随机推荐

  • 如何过滤chrome的devtool控制台历史记录

    在 bash 中 我使用历史搜索向前和历史搜索向后功能来允许我输入要运行的命令的几个字符 然后按向上箭头循环浏览历史记录中与这些字符匹配的项目 我想要 chrome devtool 控制台也有同样的东西 我经常使用向上箭头来循环浏览我的历史
  • PHP 相等(== 双等于)和恒等(=== 三等)比较运算符有何不同?

    有什么区别 and 松散究竟如何 比较工作 具体如何严格 比较工作 有哪些有用的例子 之间的区别 and 松散的区别 等于运算符和严格运算符 相同的运算符在中得到了准确的解释manual http php net manual en lan
  • iOS 将大数字转换为较小格式

    如何将所有超过 3 位的数字转换为 4 位或更少的数字 这正是我的意思 10345 10 3k 10012 10k 123546 123 5k 4384324 4 3m 四舍五入并不完全重要 但却是一个额外的优点 我已经研究过 NSNumb
  • 我如何在 Skype 上玩 google?

    此代码用于在 Skype 上向某人发送消息 但我不知道如何设置https play google com store apps details id com skype raider https play google com store
  • 如何从Excel电子表格中读取数据?

    在我正在工作的一个项目中 客户在最后一刻要求我添加从 Excel 电子表格导入数据的功能 他发送给我的示例具有 xlsx 扩展名 因此我假设它们来自 Excel 2010 但如果可能的话 我希望支持所有版本 有没有一种快速 简单的方法可以从
  • Python - 循环多维字典[重复]

    这个问题在这里已经有答案了 如果我解释我认为我在做什么 我希望有人能解释我哪里出错了 我有以下字典 ls The Wolf Gift 13 cover V Books Anne Rice The Wolf Gift 13 cover jpg
  • Linux 上的调试符号是否加载到内存中?

    从可执行文件 或共享库 中剥离调试符号是否会减少内存使用量 我知道它减少了磁盘文件的大小 我感兴趣的是实际使用的 RAM 德雷珀的论文http www akkadia org drepper dsohowto pdf http www ak
  • 每 14 天(每两周)触发一次 UILocalNotification Swift

    这个问题已经在SO上得到了回答 这是参考 iOS 通知触发 每两周和 或每季度 https stackoverflow com questions 41441124 ios notification trigger fortnightly
  • Pandas 的 T 检验

    如果我想计算 Pandas 中两个类别的平均值 我可以这样做 data Category cat2 cat1 cat2 cat1 cat2 cat1 cat2 cat1 cat1 cat1 cat2 values 1 2 3 1 2 3 1
  • 如何覆盖具有多个子项目的 SBT 项目中的子项目中的设置

    我有一个项目 其中子项目作为 git 子模块添加到子目录中 每个独立项目都有自己的build sbt文件 根项目依赖于并聚合这些子项目 如何覆盖设置值 例如organization or version 在那些子项目里面 lazy val
  • mysql使用连接池时为什么需要释放连接?

    我正在尝试实现以下nodejs mysql数据库this https medium com mhagemann create a mysql database middleware with node js 8 and async awai
  • 有没有办法在Python中按第n个分隔符分割字符串?

    例如 如果我有以下字符串 这是一个字符串 我可以将它分割为每个第二个 而不是每个 以便它返回两个值 this is 和 a string 而不是返回四个值吗 这是另一个解决方案 span 2 words this is a string s
  • 使用jquery求div内元素的总和

    我正在对一组用户进行排序 我有 4 个分组 如下所示 显示 2 个 div class groupWrapper div class groupItem div class itemHeader div class first John d
  • 如何在不链接libc.so的情况下访问段寄存器?

    我正在尝试在 Ubuntu 20 10 上使用 NASM 版本 2 15 04 在 64 位程序集中编写一个简单的堆栈金丝雀 执行下面的代码会导致在使用命令进行汇编和链接时出现分段错误nasm felf64 canary asm ld ca
  • Twitter iOS Streaming API:未收到数据

    我正在尝试修改Apple使用Twitter API的示例代码 以便我可以使用流API来过滤推文 我正在尝试实施针对此问题建议的方法 TWRequest 是否适用于 Twitter 流 API https stackoverflow com
  • Twilio:此电话号码无法发送消息

    我现在有一个 Twilio 测试帐户 我获得了一个比利时电话号码 并验证了我自己的手机号码 我正在尝试从分配的 Twilio 号码向我的手机号码发送简单的 SMS 消息 但这不起作用 仪表板显示 此电话号码无法发送消息 但在消息常见问题解答
  • 如何使用 WSDL

    我正在开发 WSDL 应用程序 但实际上我不明白什么是 wsdl 参数以及我将如何处理返回的 XML 例如 https adwords google com api adwords cm v201309 CampaignService ws
  • 如何防止响应式网页上的水平滚动?

    我正在使用 twitter bootstrap 来使我的应用程序具有响应能力 当我将浏览器窗口的宽度缩小到最小尺寸或在移动设备 例如 iPhone 上查看页面时 用户可以水平滚动 水平滚动量很小 但我想将其全部删除 我相信这是由于我包含的
  • 删除R中一组行中的某些行

    假设我有这个数据集 Id Name Price sales Profit Month Category Mode Supplier 1 A 2 0 0 1 X K John 1 A 2 0 0 2 X K John 1 A 2 5 8 3
  • Swift 中设置和读取 Bool 是原子操作吗?

    正如标题所示 很简单 基本上 在这个例子中 我们是否可以获得无效状态 var myBool false Thread 1 while true if randomEvent myBool true Thread 2 while true i