man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决办法,pthreadmutexinit

本文解决了Mint/Ubuntu系统中使用man命令查询pthread_mutex函数时显示无手册条目的问题。通过安装manpages-posix-dev包,成功获取了相关函数的手册页面。

原文链接:http://www.bkjia.com/ASPjc/869106.html


man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决办法,pthreadmutexinit


问题

在刚装好的 Mint/Ubuntu 可能会出现 man pthread_mutex 相关的函数没结果,

报No manual entry for pthread_mutex_init 的错误,如下图



解决办法

安装manpages:manpages-posix-dev

Mint/Ubuntu:sudo apt-get install manpages-posix-dev


结果

再man下试试吧




pthread_mutex_lock,为何下面的程序没有产生死锁???

循环等待其实是这样的:检查条件满不满足,不满足就解锁,然后等,等到了要检测的时候,又上锁,然后检查,不满足就解锁。
也就是说,进了pthread_cond_wait函数以后,它就释放了lock,然后在has_product上等待,等到has_product被触发了,就再上锁,然后出函数。你的消费者线程调用了pthread_cond_wait以后,就释放了锁,然后这个函数不返回(这个函数不返回你的代码就不会运行下去),等到has_product触发了,这个函数就获取锁,然后返回。
再解释一下,就是调用这个函数之前,你这个线程是拿到锁的;出了这个函数,你的线程也还是拿到锁的;但是进了这个函数还没出来的过程中,你的线程会释放锁。
 

谁可以讲解一下pthread_mutex_t的特性

这是线程吧,pthread_mutex_t就是定义的变量就是一个门那样,如果你某一个线程把它锁住了,其他线程就不能对它加锁,只有第一个之前那个线程把锁解开了其他线程才能继续。。。不知道你程序是哪里来的,没看懂

在 POSIX 多线程编程中,`pthread_mutex_init` 和 `PTHREAD_MUTEX_INITIALIZER` 都用于初始化互斥锁(`pthread_mutex_t`),但它们在使用方式、灵活性和适用场景上有显著区别。 ### `pthread_mutex_init` 函数 `pthread_mutex_init` 是一个函数,用于动态初始化互斥锁。其原型如下: ```c int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); ``` 该函数允许在运行时指定互斥锁的属性,例如锁的类型(如 `PTHREAD_MUTEX_NORMAL`、`PTHREAD_MUTEX_RECURSIVE` 等)以及是否共享于多个进程之间。这种方式适用于需要在程序运行过程中动态配置锁属性的场景[^1]。 示例代码: ```c pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL); // 使用默认属性初始化 ``` ### `PTHREAD_MUTEX_INITIALIZER` 宏 `PTHREAD_MUTEX_INITIALIZER` 是一个宏,用于静态初始化互斥锁。它通常用于在声明互斥锁变量时就进行初始化,适用于不需要自定义属性的情况。 示例代码: ```c pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ``` 该方式简单方便,但无法指定自定义的互斥锁属性,因此在需要特定行为(如递归锁错误检查锁)时并不适用[^4]。 ### 主要区别总结 | 特性 | `pthread_mutex_init` | `PTHREAD_MUTEX_INITIALIZER` | |------|-----------------------|------------------------------| | 初始化方式 | 动态 | 静态 | | 是否支持自定义属性 | 是 | 否 | | 适用场景 | 需要运行时配置锁属性 | 简单的默认初始化 | | 是否需要调用销毁函数 | 是(需调用 `pthread_mutex_destroy`) | 否(无需销毁) | ### 使用建议 - 若需要在初始化互斥锁时指定特定属性(如递归锁),应使用 `pthread_mutex_init` 函数。 - 若只需使用默认属性的互斥锁,并且变量作用域允许静态初始化,则可以使用 `PTHREAD_MUTEX_INITIALIZER`,这样代码更简洁[^1]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值