私はLinuxに取り組んでいます。私のコードでは、RECURSIVE ミューテックスをロックしようとしているいくつかのスレッド (たとえば 2 としましょう) を実行しようとしていますが、ミューテックスにアクセスしてロックできるスレッドは 1 つだけですが、2 番目のスレッドは最初のミューテックスの後でも EBUSY エラーを取得します。スレッドがロックを解除しました。ミューテックスがPRIVETであり、SHAREDではないためだと思います。
次のように、mutex を RECRUSIVE と SHARED の両方に設定しようとしています。
void
MutexCreate(pthread_mutex_t* _m)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(_m, &attr);
}
(私は関数エラーをチェックします - そしてそれらはすべて0を返します)
DEFAULT SHARED ミューテックスにしようとしても:
void
MutexCreate(pthread_mutex_t* _m)
{
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(_m, &attr);
}
それはまだPRIVETのままです。
何か案は?