pthread_mutex_unlock 如何区分线程?
Posted
技术标签:
【中文标题】pthread_mutex_unlock 如何区分线程?【英文标题】:How pthread_mutex_unlock distinguish threads? 【发布时间】:2015-02-10 16:22:25 【问题描述】:只有互斥锁的所有者才能解锁。但是互斥锁如何区分线程锁定呢? 线程在 Linux 中有什么独特的特性吗?
【问题讨论】:
关于C中的多线程,C11在里面增加了threads.h
,所以现在C基本上比以前支持了相当高层次的线程抽象。
注:确保只有所有者解锁互斥锁是程序员的责任,通常互斥锁不需要验证正确的线程解锁它。 (在 glibc 中,所有者的线程 ID 存储在互斥锁中,这对于调试很有用,但 POSIX 不需要)。
@JonathanWakely:递归和错误检查互斥锁类型需要它。
【参考方案1】:
您可以查看实现源代码以了解详细信息(来自 GNU libc
Git 存储库的 pthread
实现可以浏览 here),但它们内部使用的 ID 不同。您可以使用pthread_self()
在应用程序级别看到这一点。它返回一个pthread_t
值,该值在给定进程中的每个线程上是唯一的。当您比较来自不同进程的 pthread_t
值时,无法保证唯一性。
然而pthread_t
对应的实际类型是实现定义的;它可以是算术(例如整数)类型,也可以是结构。因此,除了使用pthread_equal()
比较它们是否相等之外,您无法以可移植的方式对它们做很多事情。
【讨论】:
【参考方案2】:它们使用线程ID进行区分;
【讨论】:
以上是关于pthread_mutex_unlock 如何区分线程?的主要内容,如果未能解决你的问题,请参考以下文章
线程相关函数-pthread_mutex_lock(), pthread_mutex_unlock() 互斥锁
从pthread中获得tid及pthread_mutex_unlock本身用户态互斥
linux C语言 多线程竞争(加锁解锁 pthread_mutex_tpthread_mutex_lock()pthread_mutex_unlock() 可解决)
linux C语言 多线程竞争(加锁解锁 pthread_mutex_tpthread_mutex_lock()pthread_mutex_unlock() 可解决)