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() 可解决)

线程同步

如何查看mysql表名字段是不是区分大小写