C 在哪里解锁pthread中的互斥锁?

C 在哪里解锁pthread中的互斥锁?,c,linux,pthreads,C,Linux,Pthreads,从主线程锁定互斥锁并从另一个线程释放互斥锁是一种好的做法吗 或者我应该确保一个线程可以在一个线程中完成所有任务?ie:lock,and unlock在一个线程中锁定,在另一个线程中解锁是不好的做法,因为这需要两个线程相互通信。一个线程应该执行它自己的锁定和解锁。从一个线程锁定,从另一个线程解锁永远都不是好的做法。这个名字说明了一切——相互排斥。一种线程,它会一直保持到完成为止。 (同样来自POSIX规范站点:) 如果当前线程持有互斥锁,则 pthread\u mutex\u unlock()函数

从主线程锁定互斥锁并从另一个线程释放互斥锁是一种好的做法吗


或者我应该确保一个线程可以在一个线程中完成所有任务?ie:lock,and unlock

在一个线程中锁定,在另一个线程中解锁是不好的做法,因为这需要两个线程相互通信。一个线程应该执行它自己的锁定和解锁。

从一个线程锁定,从另一个线程解锁永远都不是好的做法。这个名字说明了一切——相互排斥。一种线程,它会一直保持到完成为止。

(同样来自POSIX规范站点:)

如果当前线程持有互斥锁,则 pthread\u mutex\u unlock()函数解锁互斥锁

调用pthread\u mutex\u unlock()时,使用调用线程 不保持将导致未定义的行为


互斥锁只能由锁定它的同一线程解锁。违反此规则的程序具有未定义的行为,并且不可移植或不稳定;当在一个稍有不同的系统上编译时,在月球的不同阶段,或者在升级之后,它可能有时会工作,有时会严重失败


如果您确实需要这种行为(由一个线程锁定,由另一个线程解锁),那么信号量可以满足您的需要。信号量没有所有者,任何线程基本上都可以随时调用
sem\u post
sem\u wait

这个问题无论如何都不是很好,但为什么它应该得到-1+1来补偿..+1的正确答案,但我建议参考而不是“manpagez.com”。(本规范为规范性规范。)