gpt4 book ai didi

c++ - 当 std::atomic::is_always_lock_free 为 false 时,std::atomic 对于中断是否安全?

转载 作者:可可西里 更新时间:2023-11-01 18:38:13 25 4
gpt4 key购买 nike

在没有操作系统的嵌入式 (ARM) 环境中,如果我使用中断,那么使用 std::atomic<T> 是否存在死锁的可能性? ?如果是这样,如何?

一般来说,任何时刻,控制都可以被中断来处理中断。特别是,如果一个人天真地拥有一个互斥锁并想用它对变量做一个“安全”操作,那么他可能会锁定它、写入和解锁,然后在其他地方锁定、读取和解锁。但如果读取处于中断状态,则可以锁定、中断、锁定 => 死锁。

特别是,我有一个 std::atomic<int>为此 is_always_lock_freefalse .我应该担心僵局吗?当我查看生成的程序集时,写着 42看起来像:

bl __sync_synchronize
mov r3, #42
str r3, [sp, #4]
bl __sync_synchronize

似乎没有锁定。读取值的汇编是相似的。是像 exchange 这样的高级操作的(可能的)锁?

最佳答案

__sync_synchronize只是一个builtin一个完整的内存屏障。不涉及锁定,因此不会像互斥锁和中断处理程序那样出现死锁。

您使用的是什么 ARM 内核?在 ARM Cortex-A7 上,以下打印 true对彼此而言。

#include <iostream>
#include <atomic>

int main()
{
std::atomic<int> x;
std::cout << std::boolalpha << x.is_lock_free() << std::endl;
std::cout << std::atomic<int>::is_always_lock_free << std::endl;
}

我希望 std::atomic<int>如果不是全部在 ARM 上,大部分(如果不是全部)都可以在没有锁的情况下实现,当然从您提供的程序集来看,它似乎没有使用锁。

关于c++ - 当 std::atomic<T>::is_always_lock_free 为 false 时,std::atomic<T> 对于中断是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com