Posix:如何在锁定状态下初始化互斥锁?

时间:2017-02-02 18:18:27

标签: unix synchronization pthreads mutex semaphore

在使用信号量时,为了强制执行线程间的同步,我发现将信号量初始化为零非常有用。

通过这种方式,只有在另一个线程在该信号量上发出信号后,才能执行部分代码。

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

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

我想知道是否有一种方法可以在锁定状态下初始化互斥锁(相当于使用信号量使用sem_init(&sem,0,0)),也许可以使用互斥锁或其他任何属性。

1 个答案:

答案 0 :(得分:1)

不幸的是,似乎无法初始化锁定状态的互斥锁。根据{{​​3}}:

  

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

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

相关问题