我在全局范围内有一个带有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次。我不知道为什么。我做错了吗?
提前致谢!