2010-09-09 79 views
0

在以下code.A 互斥是initialized.what是NULL的意义。互斥初始化 - (UNIX)

pthread_mutex_init(&a->monitor,NULL); 

我想知道为什么我们传递NULL作为第二个参数。

+1

难道你不只是阅读pthread的手册页:http://www.rootr.net/man/man/pthread_mutex_init/3 – 2010-09-09 07:41:12

+0

@Martin约克 - 谢谢你的信息。下次我会记住这一点。 – Pavitar 2010-09-09 07:45:37

回答

6

第二个参数是指向pthread_mutexattr_t结构的指针,它可以让您调整互斥锁的行为; NULL意味着“这里没有特殊的选项,使用默认的互斥体行为。”

大多数互斥选项仅在边缘情况下有用(避免优先级反转死锁,共享进程之间的互斥量而不是线程),更有用的(例如递归控制)仅在2008版POSIX中标准化,意味着你不能依靠他们的跨平台存在。 paxdiablo的答案有一个全面的列表。

+0

@ Zack- Thankyou – Pavitar 2010-09-09 05:45:42

+1

在[POSIX'pthreads.h' spec](http://www.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html)中有一个列表 - 请参阅以'pthread_mutexattr_' – caf 2010-09-09 06:26:54

+0

它们没有很差的标准化,IEEE/OG与ISO的标准一致。而且大多数情况下,这并没有用,你说得对。但是,他们使用它们,但是它们可能是边缘案例。 – paxdiablo 2010-09-09 06:29:56

2

pthread_mutex_init的第二个参数将pthread_mutexattr_t作为参数。 可以使用第二个参数来指定互斥体的属性,以及是否使用其默认的互斥体属性。

4

NULL作为一个互斥属性,为您提供了一个实现定义的默认属性。如果您想知道您可以使用属性做什么,请查看following reference并按照SEE ALSO部分中的pthread_mutexattr_*链接进行操作。

这是标准的第7期,1003.1-2008。起点是here。单击左下角的Headers将允许您导航到特定功能(包括pthreads.h)。

的属性,可以设置或获取:

  • type(死锁,死锁检测,递归等)。
  • robustness(当你获得一个互斥体并且拥有它的原始拥有者死亡时会发生什么)。
  • process-shared attribute(用于跨进程边界共享互斥锁)。
  • protocol(线程在优先级较高的线程想要互斥体时的行为方式)。
  • priority ceiling(临界区运行的优先级,防止优先级反转的一种方法)。

而且,当然也有init and destroy calls,它们与特定属性没有直接关系,但用于创建它们。