首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pthread_spinlock是否会导致从用户空间切换到内核空间

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

Stack Overflow用户
提问于 2020-01-15 18:40:43
回答 1查看 251关注 0票数 1

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

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

此外,C++11在std::atomic上也提出了同样的问题:std::atomic将留在用户空间还是需要从用户空间切换到内核空间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 19:52:15

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

下面是指向x86x86-64ia64sparc32sparc64PPCSH4general case的glibc实现的链接,所有这些都基于CAS循环。

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

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

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

一些互斥实现(例如Windows临界区)是混合的:它们会先旋转一段时间,然后才会转到基于syscall的锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59749676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档