首页 > 解决方案 > 在C中全局初始化互斥锁

问题描述

我有一些代码,其中两个 2 线程修改同一个变量的值,但具有两个不同的函数。所以我决定使用一个通用的互斥锁。那是:我在全球范围内初始化了它:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>


#define perror_pthread(ret, msg) \
        do { errno = ret; perror(msg); } while (0)



pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;      /*define a mutex-object */ 
pthread_mutex_init(&mutex,NULL);  /*initialise this mutex object with default values */

我收到一条错误消息:

error: expected declaration specifiers or ‘...’ before ‘&amp;’ token
 pthread_mutex_init(&mutex,NULL);  /*initialise this mutex object with default values */
                    ^

我不知道这是否是一个好习惯,但我觉得两个函数应该有相同的互斥锁,以便在有锁时得到通知

标签: csynchronizationpthreadsmutex

解决方案


pthread_mutex_init是一个函数,C 禁止文件范围内的表达式(即函数调用)。

使用静态初始化程序或pthread_mutex_init(...)放入main().


推荐阅读