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是在函数体中定义的auto
variables。 虽然我从来没有见过这样的平台,即使是auto
variables,这个限制在最新版本的POSIX标准中已经被删除了。
如果可以的话, static
variables是非常可取的,因为它允许更容易地编写引导代码。 无论何时在运行时input使用这样的互斥体的代码,都可以确保互斥体被初始化。 这是multithreading的宝贵信息。
当你需要互斥量的特殊属性时,使用init函数的方法是可取的,例如recursion的,或者可以在进程之间共享,而不仅仅是在线程之间。
您可以使用dynamic初始化设置互斥锁的更多属性,如果在运行时添加一堆互斥锁,则只能使用dynamic方法。
静态方法没有问题,如果这符合您的需求。
在默认的互斥属性是适当的情况下,macrosPTHREAD_MUTEX_INITIALIZER可以用来初始化互斥量。
如果你想指定互斥量的属性进行dynamic初始化……..
这个效果应该相当于通过调用pthread_mutex_init()来实现dynamic初始化,参数指定为NULL,除了不执行错误检查。