スピンロック同期メカニズムを研究するとき、各関数に対応するマクロがあることがわかりました。たとえば、spin_lockには関数があります。
static __always_inline void spin_lock(spinlock_t *lock) {
raw_spin_lock(&lock->rlock); }
そしてマクロ
#define spin_lock(x) pthread_mutex_lock(x)
2つの異なる定義があるのはなぜですか。各定義はいつ使用されますか?ありがとうございます!
答え1
このマクロは次に定義されています。tools/include/linux/spinlock.h
: したがって、ツリーの一部であり、tools
カーネルツリーによって提供されるカーネル関連ツールにのみ使用されます。カーネルコードとユーザー空間コードは、カーネルツリーで同じ基本要素を使用できるように存在します。このマクロはspin_lock
同等のpthread基本要素に変換されます。
インライン関数、定義済みinclude/linux/spinlock.h
、カーネル自体内で使用されます。