2017-02-02 3 views
1

セマフォを使って作業するとき、多くの場合、スレッド間の同期を強制するために、セマフォをゼロに初期化すると便利です。Posix:ロックされた状態でミューテックスを初期化するにはどうしたらいいですか?

このようにして、別のスレッドがそのセマフォに信号を送りた後でのみコードの一部を実行させることができます。

これはmutexでも達成できますか?

私はPosixのミューテックスを(例えばpthread_mutex_init(&mutex,NULL)経由で)初期化するとき、ロックされていない最初のスレッドが成功するように、通常はロック解除状態で初期化されます。

ロックされた状態(セマフォーでsem_init(&sem,0,0)を使用するのと同等)でミューテックスを初期化する方法があるかどうか、ミューテックスなどの属性を使用しているかどうかは疑問でした。

答えて

1

残念ながら、ロックされた状態のミューテックスを初期化する方法はないようです。 opengroupによると:

pthread_mutex_initの()関数は、attrが指定された属性を持つミューテックスによって参照ミューテックスを初期化するものとします。 attrがNULLの場合、デフォルトのmutex属性が使用されます。その効果は、デフォルトのmutex属性オブジェクトのアドレスを渡すのと同じになります。 初期化が成功すると、ミューテックスの状態は初期化され、ロック解除されます。

したがって、手動でロックする必要があります。ラッパー関数は物事をより醜くするかもしれません:-)

関連する問題