1

私は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回しか機能しません。理由はわかりません。私は何か間違ったことをしていますか?

前もって感謝します !

4

0 に答える 0