在研究自旋锁同步机制时,我注意到每个函数都有对应的宏,例如 spin_lock 有一个函数
static __always_inline void spin_lock(spinlock_t *lock) {
raw_spin_lock(&lock->rlock); }
和宏观
#define spin_lock(x) pthread_mutex_lock(x)
为什么有两种不同的定义以及每种定义在什么情况下使用?多谢!
答案1
该宏定义于tools/include/linux/spinlock.h
:因此它是树的一部分tools
,并且仅用于内核树中提供的与内核相关的工具。它的存在使得内核代码和用户空间代码可以在内核树中使用相同的原语;该宏转换spin_lock
为等效的 pthreads 原语。
内联函数,定义于include/linux/spinlock.h
,在内核本身中使用。