1

マンページから:

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

デフォルトのミューテックス属性は何ですか?
このコードで何が設定されますか: pthread_mutex_t mutexLock = PTHREAD_MUTEX_INITIALIZER;?

4

2 に答える 2

2

ミューテックス属性のデフォルトを取得するには、POSIX 仕様を掘り下げる必要があります。

  • pthread_mutexattr_settype()

    PTHREAD_MUTEX_DEFAULT

    このタイプのミューテックスを再帰的にロックしようとすると、未定義の動作が発生します。呼び出しスレッドによってロックされていないこのタイプのミューテックスをロック解除しようとすると、未定義の動作が発生します。ロックされていないこのタイプのミューテックスをロック解除しようとすると、未定義の動作が発生します。実装では、このミューテックスを他のミューテックス タイプの 1 つにマップできます。

    これは他のミューテックス タイプとは異なる場合がありますが、PTHREAD_MUTEX_NORMALまたはにマップできることに注意してくださいPTHREAD_MUTEX_ERRORCHECK

  • pthread_mutexattr_setpshared()

    属性のデフォルト値は ですPTHREAD_PROCESS_PRIVATE

他の属性については、仕様に明確に記載されていないようです。これらの属性は次のとおりです。

于 2013-02-01T16:48:46.757 に答える
0

このリンクを確認してください: http://www.sourceware.org/pthreads-win32/manual/pthread_mutex_init.html

pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;

pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER;

pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;

pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
于 2013-02-01T08:33:04.367 に答える