Pthreads にはlock_writing
機能がないため、その機能を知らずにコードを確認することはできません。
ただし、pthread_mutex_destroy
ロックされているミューテックスを呼び出すのは未定義の動作です。したがって、オブジェクトのデストラクタがそのミューテックスを (明示的に、またはデータ メンバーのデストラクタの一部として) 破棄すると仮定すると、その前にミューテックスのロックを解除する必要があります。
正しい場所でロックを解除すれば、コードは正しいです。間違った場所でロックを解除すると、正しくありません。正確な場所がどこかはわかりません。
他のスレッドは、他のスレッドが配列とメモリからオブジェクトを削除するために取得できると同時に、配列からオブジェクトへのポインタを取得できます。「作業」スレッドは常にポインターを取得し、ミューテックスをロックし、いくつかの作業を行ってからミューテックスをロック解除し、ポインターを永久に失います。
1 つのオブジェクトだけでなく、データ構造全体を保護するためにミューテックスが必要になる場合があります。競合状態の可能性があるように私には思えます:
Thread 1 Thread 2
get pointer to object from data structure
get ptr from data structure
lock object
cleanup
unlock object
destroy object
lock object (oops, it doesn't exist any more)