Linux 的临界区

Linux 的临界区

在linux或linux的库中,是否有与win32中的临界区等效的东西?

我知道互斥体,但它与关键部分不同,因为关键部分在内部使用用户模式自旋锁和事件对象,并且它必须比互斥体更快。

答案1

如果您想要来自内核空间的东西,那么您可能需要查看信号量 ( sem_overview(7))。您可以从信号量构建更高级别的结构,例如“事件”、“条件”、“互斥体”(“关键部分”)。 C 中有较旧和较新的接口。一些高级语言(如 Python 和 Perl)也公开了该接口。

您可能正在谈论的“互斥体”是 pthread 的互斥体,它将要比用户空间中的任何东西都快,尤其是使用自旋锁的空间(它是为极低级别的操作系统级别构造而设计的)。某些 pthread 的实现可能使用操作系统级别semaphore或可能使用其他构造。

答案2

在 Linux 下,POSIX 互斥体由名为 futex(2) 的特色内核工具实现,该工具是 NPTL 的一部分。这意味着您的线程仅在需要挂起时才陷入内核空间,或者只是一个简单的用户空间函数。

自旋锁非常简单,根本不需要内核参与,您只需通过 __sync_bool_compare_and_swap() 之类的东西即可轻松构造它。 Glibc 实现了自旋锁的原因 -- man pthread_spin_init -- ,但是自旋锁并不总是像你想象的那样“快”。

相关内容