PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init(&mutex,param)

有什么区别吗?

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 

要么

 pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); 

如果我只使用第一种方法,我是否足够安全?

注:我的问题主要是指非常小的程序,至多我会做的是连接几个客户端到服务器,并解决他们的查询与工作线程。

对于旧版本的POSIX标准,第一个使用初始化方法的方法只能保证与静态分配的variables一起工作,而不是variables是在函数体中定义的autovariables。 虽然我从来没有见过这样的平台,即使是autovariables,这个限制在最新版本的POSIX标准中已经被删除了。

如果可以的话, staticvariables是非常可取的,因为它允许更容易地编写引导代码。 无论何时在运行时input使用这样的互斥体的代码,都可以确保互斥体被初始化。 这是multithreading的宝贵信息。

当你需要互斥量的特殊属性时,使用init函数的方法是可取的,例如recursion的,或者可以在进程之间共享,而不仅仅是在线程之间。

您可以使用dynamic初始化设置互斥锁的更多属性,如果在运行时添加一堆互斥锁,则只能使用dynamic方法。

静态方法没有问题,如果这符合您的需求。

在默认的互斥属性是适当的情况下,macrosPTHREAD_MUTEX_INITIALIZER可以用来初始化互斥量。

如果你想指定互斥量的属性进行dynamic初始化……..

这个效果应该相当于通过调用pthread_mutex_init()来实现dynamic初始化,参数指定为NULL,除了不执行错误检查。