之间有什么区别
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
要么
pthread_mutex_t lock;
pthread_mutex_init ( &lock, NULL);
如果仅使用第一种方法,我是否足够安全?
注意:我的问题主要涉及非常小的程序,在这些程序中,我最多要做的是将多个客户端连接到服务器,并使用辅助线程解决其查询。
Answers:
您可以通过动态初始化来设置互斥锁的更多属性,并且仅当在运行时添加一堆互斥锁时才可以使用动态方法。
如果静态方法符合您的需求,则没有任何问题。
malloc()
(或属于分配的对象)分配的。
我想引用这本书的内容:
对于
POSIX
线程,有两种初始化锁的方法。一种方法是使用PTHREAD_MUTEX_INITIALIZER
,如下所示:pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
这样做会将锁设置为默认值,从而使锁可用。动态的方法(即在运行时)是通过
pthread_mutex_init()
如下方式进行调用:int rc = pthread_mutex_init(&lock, NULL); assert(rc == 0); // always check success!
该例程的第一个参数是锁本身的地址,而第二个参数是可选的属性集。自己了解更多有关属性的信息;传递NULL只是使用默认值。两种方法都可以,但是我们通常使用动态(后期)方法。
在适合使用默认互斥锁属性的情况下,可以使用宏PTHREAD_MUTEX_INITIALIZER初始化互斥锁。
如果要为互斥锁指定属性,请使用动态初始化.......。
该效果应等同于通过调用参数为attr的pthread_mutex_init()进行动态初始化,指定为NULL,除了不执行错误检查。