【发布时间】:2012-06-18 21:01:53
【问题描述】:
我正在开发一个多线程程序,并且有一个关于在哪里定义互斥锁的问题。
相关信息:程序有一个main.c,我们根据用户输入确定具体的动作。 main 调用位于名为master.c 的文件中的master_function。在master.c 文件中,我们创建了 N 个线程以及其他一些操作(不相关)。线程调用位于son.c 文件中的名为son_threads 的函数,当它们进入临界区时需要使用互斥锁(编辑多个全局变量以防止竞争条件)。我拥有的另一个文件是type.h,我在其中定义了几个需要使用的全局变量。
互斥量的声明为:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
所以我尝试在type.h 中定义互斥锁,以便son.c 文件可以看到它。当我尝试编译时,它给了我错误。这是正确的,因为我在多个文件中定义了该互斥体。
但我很确定我无法在son.c 文件中定义互斥锁,因为每次创建该线程时,互斥锁都会被初始化为其默认设置,不允许我正确使用它。不确定这一点。
互斥锁必须是一个全局变量,N 个线程可以访问它。那么我应该把它放在哪里呢?
我不知道我的解释是否正确。尽我所能。
【问题讨论】:
标签: c multithreading unix mutex semaphore