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

原文链接: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 的错误,如下图

man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决办法,pthreadmutexinit_第1张图片


解决办法

安装manpages:manpages-posix-dev

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


结果

再man下试试吧

man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决办法,pthreadmutexinit_第2张图片



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

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

谁可以讲解一下pthread_mutex_t的特性

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

你可能感兴趣的:(Linux命令,linux应用程序开发,Linux经典【转载】)