私はfile1.cを持っています:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
グローバルに。そしてfile1.hで:extern pthread_mutex_t mutex;
。しかし、私はfile2.cでこのミューテックスとも呼んでいます。
file1.cおよびfile2.cは、次のようなミューテックスを使用します。
file1.c:
#include "finc1.h"
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *f1()
{
if (...)
{
pthread_mutex_unlock(&mutex);
return (NULL);
}
if (...)
{
pthread_mutex_unlock(&mutex);
return (...);
}
else
{
...
}
pthread_mutex_unlock(&mutex);
return (...);
}
void *f2()
{
...
pthread_mutex_unlock(&mutex);
return (...);
}
void *func1()
{
pthread_mutex_lock(&mutex);
if (...)
return (f1());
if (...)
return (f1());
return (f2());
}
file1.h:
...
extern pthread_mutex_t mutex;
...
file2.c:
#include "finc1.h"
void func2()
{
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
}
そして、別のファイルがあります。たとえば、func3()が含まれているfile3.cには、ミューテックスはありませんが、func1()を呼び出してからfunc2()を呼び出します。
file3.c:
#include "finc1.h"
void func3()
{
if(...)
return(func1());
func1();
func2();
}
ここに問題があります。そのミューテックスは10回に1回しか機能しません。理由はわかりません。私は何か間違ったことをしていますか?
前もって感謝します !