【问题标题】:where to unlock mutex in pthread?在哪里解锁pthread中的互斥锁?
【发布时间】:2011-08-28 13:17:37
【问题描述】:

从主线程锁定互斥体并从另一个线程释放是一种好习惯吗?

或者我应该确保一个线程可以一次性完成所有操作?即:锁定和解锁

【问题讨论】:

  • 这个问题无论如何都不是很好,但为什么它应该得到-1? +1 补偿..

标签: c linux pthreads


【解决方案1】:

http://www.manpagez.com/man/3/pthread_mutex_unlock/

(也来自 POSIX 规范网站:http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_lock.html

如果当前线程持有互斥锁,那么 pthread_mutex_unlock() 函数解锁互斥锁。

使用调用线程的互斥体调用 pthread_mutex_unlock() 不成立将导致未定义的行为。

【讨论】:

  • +1 以获得正确答案,但我建议参考POSIX spec 而不是“manpagez.com”。 (规范是规范的。)
【解决方案2】:

互斥锁只能由锁定它的同一线程解锁。违反此规则的程序具有未定义的行为并且不可移植或稳定;当在稍微不同的系统上编译时、在不同的月相期间或在升级之后,它有时似乎可以工作,而在其他时候却严重失败。

如果您确实需要这种行为(由一个线程锁定并由另一个线程解锁),信号量可能会满足您的需求。信号量没有所有者,基本上任何时候任何线程都可以调用sem_postsem_wait

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      从一个线程锁定并从另一个线程解锁从来都不是好习惯。这个名字说明了一切——互斥。一个线程会一直持有它直到完成。

      【讨论】:

        猜你喜欢
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 2013-06-06
        相关资源
        最近更新 更多