首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在LINUX系统中,互斥和信号量会“繁忙等待”吗?

在LINUX系统中,互斥和信号量会“繁忙等待”吗?
EN

Stack Overflow用户
提问于 2017-10-07 09:01:49
回答 1查看 7.9K关注 0票数 2

最近,我了解到linux内核中的suspended/blocked睡眠系统调用会将当前调用线程挂起到一个状态,这意味着在上述时间过去之前,它们不会使用。-完全理解。

现在是互斥和信号,

Mutex锁:

代码语言:javascript
运行
复制
acquire() {
while (!available)
; // busy wait    --> my doubt
available = false;;
}

release() {
available = true;
}

信号量锁:

代码语言:javascript
运行
复制
wait(S) {
while (S <= 0)
; // busy wait --> my doubt
S--;
}
signal(S) {
S++;
}

P.S:这些代码片段摘自亚伯拉罕·西尔施塔茨的“操作系统概念-第9版”

我的问题:

我知道繁忙等待并不是解决同步问题的有效方法,但是从上面提到的代码片段中,我对使用互斥和信号量是否会导致繁忙等待?(尽管互斥和信号量被广泛用于解决大多数sysnc问题)。

使我感到使用互斥量和信号量并不是解决同步问题的有效方法,因为它将消耗CPU周期(因为它不会导致挂起状态,而是在will循环中旋转)。

简而言之:会做互斥和信号量繁忙的等待,而不是将等待线程置于挂起的状态??

提前谢谢!如果我理解错了,请纠正我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-07 09:17:43

互斥和信号量是否繁忙地等待?

不,在内部,这些函数(例如,pthread_mutex_lock之类的多线程互斥函数)使用原子性机器指令(用汇编程序编码),再加上futex(7)

对于POSIX信号量(参见概览(7)),内核调度器将安排其他任务。所以它不忙着等待。

如果没有可运行的任务,内核将在其怠速回路中等待(而不需要消耗CPU周期)以寻找某种东西(如中断)。这样,你的笔记本电脑就不会过热,在这种情况下会使用过多的电池!

也可以阅读http://pages.cs.wisc.edu/~remzi/OSTEP/ (免费下载)。如果你想开发一些玩具内核的话,也可以看看OSDEV。您还可以研究Linux 内核的源代码,因为它是自由软件,然后询问核菜鸟。标准的C库及其线程层也是免费软件(请学习glibcmusl-libc源代码)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46618470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档