两种常见的锁定习语是:
if (!atomic_swap(lockaddr, 1)) /* got the lock */
Run Code Online (Sandbox Code Playgroud)
和:
if (!atomic_compare_and_swap(lockaddr, 0, val)) /* got the lock */
Run Code Online (Sandbox Code Playgroud)
其中val可能只是一个常量或锁定的新潜在所有者的标识符.
我想知道的是x86(和x86_64)机器上的两者之间是否存在任何显着的性能差异.我知道这是一个相当广泛的问题,因为单个cpu模型之间的答案可能差异很大,但这是我要求的原因之一,而不仅仅是我可以访问的几个cpus的基准测试.