gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:22:01 24 4
gpt4 key购买 nike

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

我的问题是自旋锁是否也会导致切换或者它会留在用户空间中?

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

最佳答案

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

以下是 x86 的 glibc 实现的链接, x86-64 , ia64 , sparc32 , sparc64 , PPC , SH4general case ,全部基于 CAS 循环。

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

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

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

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

关于c++ - pthread_spinlock 是否会导致从用户空间切换到内核空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59749676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com