2011-12-24 8 views

答えて

8

ミューテックスをコピーするのは未定義です。マップ内のmutexへのポインタを入れてみてください。

EDITこれは未定義の動作の性質です。時々あなたは幸運になる(またはそう思われる)ことがあり、時にはそうしないこともあります。

マップに複数のミューテックスをコピーするのではなく、ミューテックスに複数のポインタを置きます。だから、のようなもの:あなたは、彼らがスコープの外に行くつもりされていない正である場合を除き、スタック上に、それらのミューテックスを割り当てないのが賢明だろうので

map<string, pthread_mutex_t *> connectedClientsMutexes; 

connectedClientsMutexes.insert(pair<string,pthread_mutex_t *>(userName, &myMutex)); 

pthread_mutex_lock(connectedClientsMutexes[userName]); 

は、おそらくあなたは、さまざまなスレッドに周辺の地図を渡しています。それらをグローバルとして宣言するか、動的に割り当ててpthread_mutex_init()で初期化します。

+0

しかし、私は複数のミューテックスを追加したいと思います。 –

関連する問題