C在多线程程序中定义互斥锁的位置?

Ale*_*ire 5 c unix multithreading mutex semaphore

我正在研究一个多线程程序,并对如何定义互斥锁有疑问.

相关信息:程序具有main.c根据用户输入确定特定操作的位置.main调用master_function,它位于一个名为的文件中master.c.在master.c文件中,我们沿着一些其他操作(不相关)创建N个线程.线程调用名为son_threads的函数,该函数位于son.c文件中,当它们进入关键区域时需要使用互斥锁(编辑几个全局变量以防止竞争条件).我有另一个文件type.h,我定义了几个我需要使用的全局变量.

互斥的声明是:

  pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

所以我试着在我的中定义互斥锁,type.h以便son.c文件可见.当我尝试编译时,它给了我错误.这是正确的,因为我在几个文件中定义了互斥锁.

但我很确定我无法在son.c文件中定义互斥锁,因为每次创建该线程时,互斥锁都会被初始化为默认设置,不允许我正确使用它.对此不确定.

互斥锁必须是一个全局变量,N个线程可以访问它.那么我应该放在哪里呢?

我不知道我是否正确地解释自己.尽我所能.

Jen*_*edt 7

只需在文件中声明您的变量即可.h

extern pthread_mutex_t mutex1;
Run Code Online (Sandbox Code Playgroud)

并保持定义与C文件中的初始化.这与C标准的含义相同.

对于POSIX,使用静态存储初始化互斥锁非常重要.所以这个定义不能存在于.h文件中.