在使用信号量时,为了强制执行线程间的同步,我发现将信号量初始化为零非常有用。
通过这种方式,只有在另一个线程在该信号量上发出信号后,才能执行部分代码。
这也可以用互斥量来实现吗?
我更好地解释一下:当我初始化Posix Mutex时(例如通过pthread_mutex_init(&mutex,NULL)
),它通常在解锁状态下初始化,这样第一个试图锁定它的线程就会成功。
我想知道是否有一种方法可以在锁定状态下初始化互斥锁(相当于使用信号量使用sem_init(&sem,0,0)
),也许可以使用互斥锁或其他任何属性。
答案 0 :(得分:1)
不幸的是,似乎无法初始化锁定状态的互斥锁。根据{{3}}:
pthread_mutex_init()函数应使用attr指定的属性初始化互斥锁引用的互斥锁。如果attr为NULL,则使用默认的互斥锁属性;效果应与传递默认互斥锁属性对象的地址相同。 初始化成功后,互斥锁的状态将初始化并解锁。
因此我们必须手动锁定它。包装函数可能会使事情变得不那么难看: - )