2017-02-02 27 views
1

当使用信号量时,通常为了强化线程之间的同步,我觉得将信号量初始化为零是很有用的。Posix:我如何初始化处于锁定状态的互斥锁?

以这种方式,我可以让一部分代码在另一个线程在信号量上发出信号后才执行。

这也可以用互斥锁来实现吗?

我解释得更好:当我初始化一个Posix Mutex(例如通过pthread_mutex_init(&mutex,NULL))时,它通常在解锁状态下被初始化,所以第一个线程试图锁定它会成功。

我想知道是否有一种方法来初始化处于锁定状态的互斥锁(相当于将sem_init(&sem,0,0)与信号量一起使用),也许通过使用一些互斥锁或其他属性。

回答

1

不幸的是,似乎没有办法来初始化锁定状态的互斥锁。根据opengroup

的调用pthread_mutex_init()函数将初始化由互斥与attr指定的属性引用的互斥。如果attr为NULL,则使用缺省的互斥量属性;效果应该与传递默认互斥对象属性的地址相同。 成功初始化后,互斥锁的状态将被初始化并解锁。

因此我们必须手动锁定它。包装函数可能使事情变得更加难看:-)