【问题标题】:Atomic operations require support from hardware?原子操作需要硬件支持?
【发布时间】:2018-11-16 06:08:28
【问题描述】:

最近在阅读有关无锁编程的内容时,我遇到了“原子操作”。我开始深入研究它。所有链接都说明了如何编写原子操作及其用法。

不过,我正在寻找有关原子操作的一些详细信息。

  1. 原子操作是否需要任何硬件功能?
  2. 语言是否为它提供 API?如果是,如何实现原子 API?
  3. 这些仅限于内核空间编程,还是也可用于用户空间编程?

【问题讨论】:

标签: c++ c atomic


【解决方案1】:

原子操作是否需要任何硬件功能?

当然,CPU 保证它们的某些指令是原子的。其中一些指令是“特殊的”,即与其他指令不同(前缀或具有其他助记符),但有些指令可能是“正常的”。例如,对齐的存储和加载在大多数 CPU 上保证是原子的。

语言是否为它提供 API?如果是,原子 API 是如何实现的?

当然,看看 C++ 实现的例子:https://en.cppreference.com/w/cpp/atomic/atomic

这些仅限于内核空间编程,还是也可用于用户空间编程?

当然,这些指令不需要任何权限,因此它们可用于用户空间。有多种库和数据结构利用原子操作。

搜索的关键字是“无锁”或“非阻塞”。这是一个例子:https://en.wikipedia.org/wiki/Non-blocking_linked_list

【讨论】:

    【解决方案2】:

    原子操作是否需要任何硬件功能。

    在实践中,是的。原则上,C++(阅读n3337)或C(阅读n1570)标准甚至不需要像我们使用的那样的计算机(理论上和不道德的,你可以使用一堆人类奴隶来代替;一个更好的变体是一位老师使用他课堂上的学生来“运行”一个小型 C 或 C++ 程序;这是一种非常好的编程教学方法)。

    另请参阅我的thisthat 答案(与您的问题类似)。

    【讨论】:

    • 有趣的是,这是您想到的第一个计算机替代品。但是再想一想,我找不到任何更好的东西,它本质上不是衍生的:)
    • @user4581301 ...训练有素,可以一丝不苟地执行机器指令,当然。我觉得你需要低薪的人来教猴子:)
    • 但是如果猴子一次只能携带一个字节,它们可能无法原子地移动一个单词。您将需要一种机制来确保没有猴子携带新的 ls 字节,而另一只猴子正忙于移动 ms 字节。例如,如果它耐心地等待第一只猴子带走两个字节,然后丢弃一个新字节,它会给接近的猴子一根香蕉。顺便说一句,猴子是大端还是小端?
    猜你喜欢
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多