我应该如何初始化 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.
如果要为锁(函数的第二个参数)设置属性,例如在进程之间共享或递归,通常使用函数调用的方法。
#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.
如果要为锁(函数的第二个参数)设置属性,例如在进程之间共享或递归,通常使用函数调用的方法。