我应该如何初始化 pthread 互斥量?

How am I supposed to initialize pthread mutexes?

#include <pthread.h>

pthread_mutex_t* mut;

int main()
{
        mut = PTHREAD_MUTEX_INITIALIZER;
}

上面的代码吐出来error: expected expression before ‘{’ token.

#include <pthread.h>

pthread_mutex_t* mut = PTHREAD_MUTEX_INITIALIZER;

int main()
{

}

上面的代码发出警告:标量初始值设定项周围的大括号

那么我应该如何初始化互斥体?

这是一个类型错误,你应该使用:pthread_mutex_t 而不是 pthread_mutex_t*:

pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

编译器抱怨的原因是试图将 PTHREAD_MUTEX_INITIALIZER 的这个宏扩展分配给 指针 :

{ { 0, 0, 0, 0, 0, __PTHREAD_SPINS, { 0, 0 } } }

使用更正后的方法,您可以在需要的任何地方传递 &mut pthread_mutex_t*

首先,您应该将其声明为 pthread_mutex_t 而不是指针 pthread_mutex_t *。您还应该决定互斥锁是函数的全局还是局部。

如果它是全局的,您可以使用以下方式初始化它:pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;

如果是本地的,你必须调用:pthread_mutex_init(&mut,NULL);(你必须检查返回值)

请注意,PTHREAD_MUTEX_INITIALIZER 是一个宏,您不能将其分配给指针。

来自 pthread_mutex_init() 手册页:

Only mutex itself may be used for performing synchronization. The result of referring to copies of mutex in calls to pthread_mutex_lock(), pthread_mutex_trylock(), pthread_mutex_unlock(), and pthread_mutex_destroy() is undefined. Attempting to initialize an already initialized mutex results in undefined behavior.

如果要为锁(函数的第二个参数)设置属性,例如在进程之间共享或递归,通常使用函数调用的方法。