スピンロックに関する質問です

スピンロックに関する質問です

スピンロック同期メカニズムを研究するとき、各関数に対応するマクロがあることがわかりました。たとえば、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、カーネル自体内で使用されます。

関連情報