1

我有一个 file1.c 与:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;在全球。在 file1.h : extern pthread_mutex_t mutex;。但我也在 file2.c 中调用了这个互斥锁。

file1.c 和 file2.c 使用这样的互斥锁:

文件1.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());
}

文件1.h:

...
extern pthread_mutex_t mutex;
...

文件2.c:

#include "finc1.h"

void func2()
{
   pthread_mutex_lock(&mutex);
   ...
   pthread_mutex_unlock(&mutex);
}

我还有另一个文件,比如说带有 func3() 的 file3.c,它没有任何互斥体,但先调用 func1(),然后调用 func2()。

文件 3.c:

#include "finc1.h"

void func3()
{
   if(...)
     return(func1());
   func1();
   func2();
}

现在问题来了。那个互斥锁只能在 10 次以上工作 1 次。我不知道为什么。我做错什么了吗?

提前致谢 !

4

0 回答 0