を使用しながら、:エラー私は要素としてキーとpthread_mutex_tとして文字列を持つマップを作成しようとすると、ミューテックス
フェーズ3:pthread_mutex_lock.c:312:__pthread_mutex_lock_full:アサーション `( - (e))!= 3 || !ロバスト 'は失敗しました。
を使用しながら、:エラー私は要素としてキーとpthread_mutex_tとして文字列を持つマップを作成しようとすると、ミューテックス
フェーズ3:pthread_mutex_lock.c:312:__pthread_mutex_lock_full:アサーション `( - (e))!= 3 || !ロバスト 'は失敗しました。
ミューテックスをコピーするのは未定義です。マップ内の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()
で初期化します。
しかし、私は複数のミューテックスを追加したいと思います。 –
コードが時々動作しないことがあります:S –