加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中的无锁共享变量? (功能不稳定)

发布时间:2020-12-14 05:30:28 所属栏目:百科 来源:网络整理
导读:在硬实时回调中使用锁和互斥锁是非法的.可以在不同的线程中读取和写入锁定自由变量.在C语言中,语言定义可能会也可能不会被破坏,但是大多数编译器都会发出可用的汇编代码,因为变量被声明为volatile(读取器线程将变量视为硬件寄存器,因此在使用变量之前实际发
在硬实时回调中使用锁和互斥锁是非法的.可以在不同的线程中读取和写入锁定自由变量.在C语言中,语言定义可能会也可能不会被破坏,但是大多数编译器都会发出可用的汇编代码,因为变量被声明为volatile(读取器线程将变量视为硬件寄存器,因此在使用变量之前实际发出加载指令,在大多数缓存一致的多处理器系统上运行良好.)

可以在Swift中声明这种类型的变量访问吗?或者是否需要将内联汇编语言或数据缓存刷新/无效提示添加到Swift语言中?

补充:将使用OSMemoryBarrier()(来自OSAtomic.h)之前和之后以及每次使用或更新任何可能的线程间变量(例如“无锁”fifo /缓冲状态计数器等) Swift强制执行足够有序的内存加载和存储指令(甚至在ARM处理器上)?

正如您已经提到的,volatile只保证变量不会缓存到注册表中(将自己视为寄存器).仅凭这一点并不能使读取和写入锁定.它甚至不能保证它的原子性,至少不能保持一致的跨平台方式.

为什么?首先想到的是指令流水线和超大(例如在具有32位或更少浮点寄存器的平台上使用Float64).

话虽这么说,你考虑过使用OSAtomic吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读