NetBSDとFreeBSDのmutex実装の違い(1)
FreeBSDでのmutexの初期化:
jpman search errorを参照。
void mtx_init(struct mtx *mutex, const char *name, const char *type, int opts);
mutexはmutex変数、nameは名前、typeは「ロックの順序をチェックするとき、ミューテックスを区別するために、証言 (witness) コードによって使用されます」とあるが、どういう事だ?NULLでもよいらしいが・・・、optsはmutexのタイプで通常のmutexであるMTX_DEFかスピンロックであるMTX_SPINを指定する。
NetBSDでのmutexの初期化:
mutex - NetBSD Manual Pagesを参照。
void mutex_init(kmutex_t *mtx, kmutex_type_t type, int ipl);
mtxはmutex変数、typeはMUTEX_DEFAULTであるべき(他にも有るが使うべきでない)と書いてある、iplはinterrupt priprity levelの事で、指定したiplによって通常のmutexになるかスピンロックのmutexになるかが決まる。
IPL_NONE, IPL_SOFT*の時は通常のmutex, IPL_VM, IPL_SCHED, IPL_HIGHの時はスピンロック。