pthread_mutex_lock等待时间的问题

runner001_cn 2006-06-27 05:48:57
在linux下,线程同步用到pthread_mutex_lock函数,我想问问,
1)当一个线程调用pthread_mutex_lock被阻塞后,是linux内部采用轮询的方式还是什么别的方式等待这个mutex被unlock?在内核代码的什么地方可以找到这些实现代码?
2)一个资源被多个线程访问,这个资源又需要同步,那么一般说来,用mutex变量加锁的效率更高还是用condition变量的效率更高?用条件变量加锁和用mutex变量加锁的区别在哪里?
3)谢谢各位达人
...全文
1751 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
TPX 2006-08-29
  • 打赏
  • 举报
回复
内核至少实现信号量
mutex可以在信号量的基础上实现,这样可以在库里实现,不过等待还是使用信号量的等待
也可以在内核里直接实现,不用信号量。

线程等待的时候进入一个队列,并设为阻塞状态,不会被继续运行
当某一线程Unlock时,会从队列中取出一个被阻塞的线程,设置为可运行状态

mutex是只有0和1两种量的信号量,并且只有本线程才可以解自己上的锁

runner001_cn 2006-07-10
  • 打赏
  • 举报
回复
我想线程什么时候被唤醒,什么时候被调度,这种机制的实现代码肯定是在内核中吧,绝对不可能在所谓的c库函数中,pthread_*这些函数只不过是调用了相关了系统调用啊或是什么的,我就是想知道这些系统调用的具体实现代码在内核的哪个部分?具体的文件名或是什么的,我对grep和egrep什么的不太熟悉,谢谢
runner001_cn 2006-07-10
  • 打赏
  • 举报
回复
to tb01412(tb):我肯定知道这些常识,只是对于在内核级别怎么去实现这些操作的我不太了解,想知道在内核里哪些地方实现这些的。如果你知道,请您告诉我,我自己去看看相关的代码。

ps:
1)“1.对于互斥量来说,由内核负责来维护,这是一种资源,内核是绝不会轮询来实现的,”你的这个观点来源于哪里?内核代码还是道听途说?
2)说来说去,你还是没有说出信号量和互斥量的区别。
tb01412 2006-07-07
  • 打赏
  • 举报
回复
当你还在问这些问题的时候,请你先去弄懂什么是内核态与用户态,什么是系统调用,C库函数的实现,C库函数的作用,先弄懂这些概念再来问这个问题
runner001_cn 2006-07-04
  • 打赏
  • 举报
回复
问一个菜鸟问题:互斥量和信号量的定义和实现是在内核中吗?我应该怎么去找?
runner001_cn 2006-07-03
  • 打赏
  • 举报
回复
谢谢tb01412(tb) ,
1)其实我更想找管理互斥量的内核代码
2)能否对条件变量的使用和互斥量的使用给一个具体的例子?我实在是没有弄明白两者的区别.或者说两者在某种意义上确实是可以替换的?

再次谢谢!
tb01412 2006-06-28
  • 打赏
  • 举报
回复
1.对于互斥量来说,由内核负责来维护,这是一种资源,内核是绝不会轮询来实现的,而是当相应的资源得到满足时,内核会唤醒等待在该互斥量上的进程,当进程调度发生时,你的那个进程就得到运行了!!!也就是会操作相应的PCB结构中的该进程的状态标识!!!具体一点的内容,你仔细看一下LINUX设备驱动程序一书就行了
2.对于条件变量来说,与互斥量是有不同的用处,只有当你需要条件变量的时候才用,而不是什么时候都用,这两者有不同的应用环境,谈不上效率的问题
runner001_cn 2006-06-28
  • 打赏
  • 举报
回复
没有人回答?自己顶一下

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧