在以下代码中。互斥锁已初始化。 NULL 的重要性是什么。
pthread_mutex_init(&a->monitor,NULL);
我想知道为什么我们将NULL作为第二个参数传递。
答案 0 :(得分:6)
第二个参数是指向pthread_mutexattr_t
结构的指针,它允许您调整互斥锁的行为; NULL表示“此处没有特殊选项,请使用默认的互斥行为。”
大多数互斥选项仅在边缘情况下有用(避免优先级反转死锁,在进程而不是线程之间共享互斥锁),更有用的(例如递归控制)仅在2008版本的POSIX中标准化,这意味着你还不能依靠他们的跨平台存在。 paxdiablo的答案有一个全面的清单。
答案 1 :(得分:4)
NULL
作为互斥锁属性,为您提供实现定义的默认属性。如果您想知道如何处理属性,请查看following reference并按照pthread_mutexattr_*
部分中的SEE ALSO
链接进行操作。
这是针对标准的问题7,1003.1-2008。起点是here。点击左下角的Headers
,您可以导航到特定功能(包括pthreads.h
)。
属性允许您设置或获取:
当然,还有init and destroy calls,与特定属性没有直接关系,但用于创建它们。
答案 2 :(得分:2)
pthread_mutex_init的第二个参数将pthread_mutexattr_t作为参数。 您可以使用第二个参数指定互斥锁的属性,以及是否使用其NULL默认互斥锁属性。