繁体   English   中英

pthread_spinlock 是否会导致从用户空间切换到内核空间

[英]Does pthread_spinlock cause switch from user space to kernel space

我知道很多事情会导致从用户空间切换到内核空间,例如mallocptherad_mutex_lock等。

我的问题是自旋锁是否也会导致切换,还是会留在用户空间?

此外,来自 C++11 的关于std::atomic相同问题: std::atomic将留在用户空间还是需要从用户空间切换到内核空间?

这取决于实现, pthread_spin_lock不正式保证保留在用户空间中。 在具有 CAS 指令的系统(即大多数商品 SMP 系统)的实践中,情况通常如此。

以下是x86x86-64ia64sparc32sparc64PPCSH4一般情况的 glibc 实现的链接,所有这些都基于 CAS 循环。

同样,不能保证特定的std::atomic实现不会进入内核,但在实践中,尤其是当std::atomic<T>::is_lock_free()返回true ,它将在用户空间中实现原子指令的帮助。

另请注意,在现代 Linux 中pthread_mutex_lock是使用futex实现的,即“用户空间互斥锁”,它在非争用情况下仍保留在用户空间中。 仅当存在争用或需要保留更多虚拟内存时, malloc才会进入内核。

话虽如此,自旋锁是否是同步的正确选择是一个更广泛的问题,它取决于系统调用之外的更多因素。 正如在这个问题中所解释的,当竞争状态非常短时,它在真正的 SMP 情况下很有用。 大多数性能优势来自上下文切换和调度的节省。

一些互斥体实现(例如 Windows 临界区)是混合的:它们会先自旋一段时间,并且仅在该委托给基于系统调用的锁之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM