我使用什么属性创build创build线程在创build时locking的pthreads互斥锁?
在锁定状态下创建的互斥体与创建并随后由创建它的线程锁定的互斥体之间没有明显的区别。 也就是说,如果你写(假设):
pthread_mutex_init(&mutex, &prelocked_attr); /* done */
与
pthread_mutex_init(&mutex, 0); pthread_mutex_lock(&done); /* done */
在这两种情况下,对于任何其他线程,在创建线程到达“完成”注释之前尝试以任何方式访问互斥体,然后执行一些可以让其他线程知道互斥体存在的操作。
事实上,你认为你需要一个预先锁定的互斥体,这强烈地向我表明,你正在尝试做一些非常错误的事情,并可能调用未定义的行为。
它似乎不被pthreads互斥体接口支持。 你将不得不相互锁定它,并使用一些其他的同步方法,以防止其他线程抓住它之前(这是我假设你想在这里做),在下面的半伪代码:
pthread_mutex_lock(my_pthread_creation_mutex); pthread_mutex_init(new_mutex, mutex_attributes); pthread_mutex_lock(new_mutex); pthread_mutex_unlock(my_pthread_creation_mutex);
你所能得到的最接近的就是使用信号量。 它们可以用特定的值初始化。 在linux上(就像你有这个标签), man sem_overview
应该给你一个很好的介绍
你不能。 如果您需要这样做,您必须在允许其他线程访问之前将其锁定。 你将不得不这样做,以防止其他线程在初始化完成之前访问它。