在询问这个问题之后,我了解到原子指令(如test-and-set )将不涉及内核。只有当进程需要休眠(等待获得锁)或唤醒(因为它不能获得锁,但现在可以)时,内核才需要执行调度操作。
test-and-set
如果是这样的话,是否意味着内存围栏(如std::atomic_thread_fence in c++11 )也不会涉及内核?
std::atomic_thread_fence
发布于 2020-02-12 09:22:47
在这个问题和引用的问题中,您都是混合的:
“它涉及内核”是什么意思?我猜您的意思是“(P)线程同步”:线程处于休眠状态,当另一个进程/线程满足给定条件时,线程就会被唤醒。
然而,测试和设置原语,如cmpxchg和内存栅栏,是由微处理器汇编程序提供的功能。内核同步原语最终是基于它们来提供系统和进程同步,使用隐藏在内核调用后的内核空间中的共享状态。
您可以查看futex源以获得证据。
但是不,内存围栏不涉及内核:它们被转换成简单汇编程序操作。和cmpxchg一样。
https://stackoverflow.com/questions/60184160
相似问题