mutex/condition変数があるとします。私は(pthread_mutex_init/pthread_cond_init)を初期化しますが、決してそれらを使用しません(ロック操作なし、シグナル/待機なし)。未使用のpthreadミューテックスまたは条件変数はどのようなリソースに割り当てられますか?
これらの未使用オブジェクトは、占有するメモリ以外の他のリソースを割り当てますか?
(私はLinuxとこの点でOSXの行動に興味がある)
mutex/condition変数があるとします。私は(pthread_mutex_init/pthread_cond_init)を初期化しますが、決してそれらを使用しません(ロック操作なし、シグナル/待機なし)。未使用のpthreadミューテックスまたは条件変数はどのようなリソースに割り当てられますか?
これらの未使用オブジェクトは、占有するメモリ以外の他のリソースを割り当てますか?
(私はLinuxとこの点でOSXの行動に興味がある)
POSIXが明示的にこれらの機能は、リソース不足(EAGAIN
とENOMEM
エラーコード)に失敗する可能性がありますことを企図しているが、どちらのLinux glibcのpthread_mutex_init()
またはpthread_cond_init()
のOSX実装もリソースを割り当てません。
Linux glibcの実装pthread_mutex_init()
は、nptl/pthread_mutex_init.c
です(関数__pthread_mutex_init()
を参照)。これは、ソースコードを直接調べることで確認できます。
pthread_cond_init()
のLinux glibcの実装は、nptl/pthread_cond_init.c
です(関数__pthread_cond_init()
を参照)。
pthread_mutex_init()
のOSXの実装では、(マクロ_PTHREAD_LOCK_INIT
参照)libpthread/pthread_mutex.c
(機能pthread_mutex_init()
_pthread_mutex_init()
とを参照)、libpthread/internal.h
です。
pthread_cond_init()
のOSX実装はlibpthread/pthread_cond.c
です(関数pthread_cond_init()
および_pthread_cond_init()
を参照)。
ありがとうございます!私はこれらを自分で確認しましたが、実際にはリソースが割り当てられていないようです。 – geza