【发布时间】:2020-01-16 15:09:31
【问题描述】:
假设我有一个原子加载-修改-存储操作:
1: ldaxr x8, [x9]
orr x10, x8, #1
stlxr w11, x10, [x9]
cbnz w11, 1b
如果我理解正确的话,当这段代码在两个内核上执行(访问相同的内存地址)时,线程 A 会使用ldaxr 锁定资源。线程 B 中的stlxr 失败并重试操作,直到线程 A 释放锁。
但是如果在主线程中的ldaxr 之后发生中断并且中断处理程序尝试访问相同的内存地址会发生什么?是死锁还是中断处理程序优先,主线程中的stlxr从中断返回时会失败?
【问题讨论】:
标签: assembly arm64 lock-free armv8