Understanding Swift’s value type thread safety - 代码分析(一)
- 结构体并不代表线程安全,swift在此上未做保证
func testScenarioA() throws {
var store: Int = 0
DispatchQueue.concurrentPerform(iterations: 1_000_000) { i in
store = i
_ = store
}
}
执行后下断点,对比寄存器和反汇编代码
(lldb) dis
UnderstandStruct`closure #1 in testScenarioA():
0x100002b60 <+0>: pushq %rbp
0x100002b61 <+1>: movq %rsp, %rbp
0x100002b64 <+4>: movq $0x0, -0x8(%rbp)
0x100002b6c <+12>: movq $0x0, -0x10(%rbp)
0x100002b74 <+20>: movq %rdi, -0x8(%rbp)
0x100002b78 <+24>: movq %rsi, -0x10(%rbp)
-> 0x100002b7c <+28>: movq %rdi, (%rsi)
0x100002b7f <+31>: popq %rbp
0x100002b80 <+32>: retq
0x100002b81 <+33>: nopw %cs:(%rax,%rax)
0x100002b8b <+43>: nopl (%rax,%rax)
(lldb) register read
General Purpose Registers:
rax = 0x00000001006236a0
rbx = 0x0000000000000000
rcx = 0x00007ffeefbff028
rdx = 0x00007fff6ac713a0 libswiftDispatch.dylib`___swift_dispatch_apply_current_block_invoke
rdi = 0x0000000000000000
rsi = 0x00007ffeefbff1f0
rbp = 0x00007ffeefbfefb0
rsp = 0x00007ffeefbfefb0
r8 = 0x00007ffeefbff158
r9 = 0x0000000101400080
r10 = 0x00000000000020ff
r11 = 0x0000000000000246
r12 = 0x00007ffeefbff158
r13 = 0x00007ffeefbff1d0
r14 = 0x0000000000000000
r15 = 0x00007fff6ac713a0 libswiftDispatch.dylib`___swift_dispatch_apply_current_block_invoke
rip = 0x0000000100002b7c UnderstandStruct`closure #1 (Swift.Int) -> () in UnderstandStruct.testScenarioA() throws -> () + 28 at main.swift:14:15
rflags = 0x0000000000000246
cs = 0x000000000000002b
fs = 0x0000000000000000
gs = 0x0000000000000000c
movq %rdi, (%rsi)
将寄存器rdi中的值赋给 rsi寄存器指向的地址所在的内存
rsi的内存指向的是 0x00007ffeefbff1f0 , 这个地址是指向 store变量
这个地址在多个线程中这个地址不变
- 综上,Int是值类型,但是从上面的代码看起来依然存在线程安全问题,多线程直接操作的是store的内存,虽然赋值是一条指令,但是可能产生ABA的问题。
- 从数据时序上看,不是安全的
- https://forums.swift.org/t/understanding-swifts-value-type-thread-safety/41406
Understanding Swift’s value type thread safety - 代码分析(一)的更多相关文章
- Effective Java 70 Document thread safety
Principle The presence of the synchronized modifier in a method declaration is an implementation det ...
- 折返(Reentrancy)VS线程安全(Thread safety)
在Wiki上,折返例如,下面的定义(接) In computing, a computer program or subroutine is called reentrant if it can be ...
- clang的线程安全分析模块 thread safety analysis
介绍 Clang的线程安全分析模块是C++语言的一个扩展,能对代码中潜在的竞争条件进行警告.这种分析是完全静态的(即编译时进行),没有运行时的消耗.当前这个功能还在开发中,但它已经具备了足够的成熟度, ...
- Thread Safety线程安全
Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分 如果disabled就选择nts(php_stomp-1.0.9-5.5-nts-vc11-x86.zi ...
- Java Concurrency In Practice -Chapter 2 Thread Safety
Writing thread-safe code is managing access to state and in particular to shared, mutable state. Obj ...
- Thread safety
https://en.wikipedia.org/wiki/Thread_safety Thread safety is a computer programming concept applicab ...
- 线程安全 Thread Safety Problem scala concurrency 并发
小结: 1.基于java并发模型 Scala concurrency is built on top of the Java concurrency model. 2. 将每个请求放入一个新的线程 T ...
- Dispatch Queues and Thread Safety
Dispatch Queues and Thread Safety It might seem odd to talk about thread safety in the context of di ...
- Thread Safety in Java(java中的线程安全)
Thread Safety in Java is a very important topic. Java provide multi-threaded environment support usi ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)
这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...
随机推荐
- identity4 系列————用户数据持久化篇[六]
前言 前面的例子已经将各种情形下的例子已经介绍了一遍,那么后面就是用户数据持久化该如何处理了. 正文 例子位置: https://github.com/IdentityServer/IdentityS ...
- 手写前端 serialize
前言 在jquery中,写下我们很方便序列化我们的表单,比如说: window.onload=function(){ var form=$('#bitgood'); // document.getEl ...
- MVC过滤器简单刨析
前言 简单介绍一下过滤器. 正文 看下过滤器类型: action: 在动作方法之前及之后执行 result: 在action结果被执行前或者之后执行,比如说返回一个视图,再执行视图前执行一个方法,再执 ...
- Kubernetes 部署集群1.28.2版本(无坑)
初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...
- 力扣584(MySQL)-寻找用户推荐人(简单)
题目: 给定表 customer ,里面保存了所有客户信息和他们的推荐人. 写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2. 对于上面的示例数据,结果为: 解题思路: 本题最 ...
- 力扣852(java&python)-山脉数组的峰顶索引(中等)
题目: 符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < i < arr.length - 1)使得: arr[0] < arr ...
- 行业 SaaS 微服务稳定性保障实战
简介: 对于Tob企业而言,稳定性即是生命线.那么,面对商户数目暴增, C 端场景业务不断扩展呢,F6汽车科技又是如何搭建可观测体系呢?一线负责人深度解读实际演进过程! 很多研发人员在日常工作中经常回 ...
- 这是阿里技术专家对 SRE 和稳定性保障的理解
简介: 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解.对于产品研发转做 SRE ,经常会产生是否要「脱离编码工作」的看法,或者认为是否要「偏离对产品/基 ...
- 全链路灰度之 RocketMQ 灰度
简介:本文将以上次介绍过的<如何用 20 分钟就能获得同款企业级全链路灰度能力?>中的场景为基础,来进一步介绍消息场景的全链路灰度. 作者:亦盏 之前的系列文章中,我们已经通过全链路金丝 ...
- 比开源快30倍的自研SQL Parser设计与实践
简介: SQL作为一种领域语言,最早用于关系型数据库,方便管理结构化数据:SQL由多种不同的类型的语言组成,包括数据定义语言,数据控制语言.数据操作语言:各数据库产品都有不同的声明和实现:用户可以很方 ...