C - 在两个不同的文件中调用相同的互斥锁,但效果不佳

时间:2013-02-08 20:44:15

标签: c mutex

我在全局范围内有一个带有pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;的file1.c。在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);
}

我有另一个文件,假设file3.c上有func3(),没有任何互斥,但是调用func1()然后调用func2()。

file3.c中:

#include "finc1.h"

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

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

提前致谢!

0 个答案:

没有答案