9999|14

732

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

Linux下怎么实现一个线程不被抢占 [复制链接]

 
在Linux系统下大家有没有什么方法使得一个线程的某些代码段不被抢占,就像单片机RTOS上的EnterCritical函数一样。

最新回复

临界代码保护区  详情 回复 发表于 2016-12-19 14:24
点赞 关注
个人签名亚里士缺德

回复
举报

14

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
有互斥锁。

点评

可否详细说明,为我这种linux初学者说说怎么做。  详情 回复 发表于 2016-12-19 10:53
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

板凳
 

可否详细说明,为我这种linux初学者说说怎么做。

点评

用互斥信号量的形式,对某段代码加锁,这样能保证在同一互斥信号量下的线程,没办法打断你加锁中的代码。这个在互斥信号量的章节会有讲解。如果有疑问,加qq群: 235371864,你懂的、。  详情 回复 发表于 2016-12-19 11:31
 
个人签名亚里士缺德
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

4
 
问题感觉不对啊,线程不被抢占只能提高它的优先级(但无论如何linux系统都会调度到其它线程上的)。

点评

2.6版本之前是不支持抢占的,2.6之后的内核可以抢占,现在大部分使用的2.6之后的内核,但是有的时候可能还是需要防止低优先级的线程的某些程序段不要被打断。  详情 回复 发表于 2016-12-19 11:17
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

5
 
moyanming2013 发表于 2016-12-19 11:13
问题感觉不对啊,线程不被抢占只能提高它的优先级(但无论如何linux系统都会调度到其它线程上的)。

2.6版本之前是不支持抢占的,2.6之后的内核可以抢占,现在大部分使用的2.6之后的内核,但是有的时候可能还是需要防止低优先级的线程的某些程序段不要被打断。

点评

你不要骗我,2.5.4内核开始就已经有抢占了。 感觉你有些概念不清楚: 你的问题是想实现原子操作,但是你的疑虑是怕出现优先级反转。 一旦进入原子操作内部(代码尽量要少!中断也可以暂时关闭!linux实时性不高普  详情 回复 发表于 2016-12-19 11:33
 
个人签名亚里士缺德
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

6
 
汤权 发表于 2016-12-19 10:53
可否详细说明,为我这种linux初学者说说怎么做。

用互斥信号量的形式,对某段代码加锁,这样能保证在同一互斥信号量下的线程,没办法打断你加锁中的代码。这个在互斥信号量的章节会有讲解。如果有疑问,加qq群: 235371864,你懂的、。

点评

群很好,推荐加入。但是线程可能会被其他进程的线程打断,我是想不要被任何进程的任何线程打断。  详情 回复 发表于 2016-12-19 11:45
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

7
 
汤权 发表于 2016-12-19 11:17
2.6版本之前是不支持抢占的,2.6之后的内核可以抢占,现在大部分使用的2.6之后的内核,但是有的时候可能 ...

你不要骗我,2.5.4内核开始就已经有抢占了。
感觉你有些概念不清楚:
你的问题是想实现原子操作,但是你的疑虑是怕出现优先级反转。
一旦进入原子操作内部(代码尽量要少!中断也可以暂时关闭!linux实时性不高普遍这么搞)基本就不会出现优先级反转。
而实现原子操作的方法有多种:
1.使用临界区。
2.使用C++里面的原子操作原语。
等。

点评

额,我不是来讨论什么时候出现抢占内核的,但是我查看资料是在2.6之后才出现preempt内核的,不过这个无所谓啦。 关于你说的“但是你的疑虑是怕出现优先级反转”,我不是担心优先级翻转,因为Linux内核的抢占性  详情 回复 发表于 2016-12-19 11:43
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

8
 
moyanming2013 发表于 2016-12-19 11:33
你不要骗我,2.5.4内核开始就已经有抢占了。
感觉你有些概念不清楚:
你的问题是想实现原子操作,但是 ...

额,我不是来讨论什么时候出现抢占内核的,但是我查看的资料说是在2.6之后才出现preempt内核的,不过这个无所谓啦
关于你说的“但是你的疑虑是怕出现优先级反转”,我不是担心优先级翻转,因为Linux内核的抢占性质,越nice的线程会优先执行,会打断我的某个线程,或者如果说有时间片轮转调度的话可能不是优先级的问题,但是我不清楚Linux是不是有时间片轮转调度机制。不过你说的是符合我的设计的,我就是要实现一些原子操作,听你的推荐我想试试互斥信号量实现临界区的方法。
谢了啊。

点评

我没推荐你“试试互斥信号量实现临界区的方法”, 如果想实现原子操作我推荐的是: 1.使用临界区。 2.使用C++里面的原子操作原语。 等。 “互斥信号量”是2个概念:互斥量、信号量,但他们都是用于线程同步的,  详情 回复 发表于 2016-12-19 11:51
 
个人签名亚里士缺德
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

9
 
qq84395064 发表于 2016-12-19 11:31
用互斥信号量的形式,对某段代码加锁,这样能保证在同一互斥信号量下的线程,没办法打断你加锁中的代码。 ...

群很好,推荐加入。但是线程可能会被其他进程的线程打断,我是想不要被任何进程的任何线程打断。
 
个人签名亚里士缺德
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

10
 
至于使用“互斥量”(一般都叫互斥量)、“信号量”等都是用于线程同步的。
乱问容易被误导,自己赶紧多看几遍《UNIX环境高级编程》。

点评

受教了,不过貌似我没有乱问哈  详情 回复 发表于 2016-12-19 11:50
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

11
 
moyanming2013 发表于 2016-12-19 11:46
至于使用“互斥量”(一般都叫互斥量)、“信号量”等都是用于线程同步的。
乱问容易被误导,自己赶紧多看 ...

受教了,不过貌似我没有乱问哈

点评

嗯,是乱答容易误导别人。 你看,一会群、互斥锁都来啦,概念也没搞清楚、问题也没搞清楚,还不如去看看书。  详情 回复 发表于 2016-12-19 11:55
 
个人签名亚里士缺德
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

12
 
汤权 发表于 2016-12-19 11:43
额,我不是来讨论什么时候出现抢占内核的,但是我查看的资料说是在2.6之后才出现preempt内核的,不过这个 ...

我没推荐你“试试互斥信号量实现临界区的方法”,
如果想实现原子操作我推荐的是:
1.使用临界区。
2.使用C++里面的原子操作原语。
等。
“互斥信号量”是2个概念:互斥量、信号量,但他们都是用于线程同步的,跟原子操作无关。
临界区也不用“互斥信号量实现”,临界区有自己的概念和实现方法。
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

13
 
汤权 发表于 2016-12-19 11:50
受教了,不过貌似我没有乱问哈

嗯,是乱答容易误导别人。
你看,一会群、互斥锁都来啦,概念也没搞清楚、问题也没搞清楚,还不如去看看书。

点评

嗯嗯,thankyou  详情 回复 发表于 2016-12-19 12:34
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

14
 
moyanming2013 发表于 2016-12-19 11:55
嗯,是乱答容易误导别人。
你看,一会群、互斥锁都来啦,概念也没搞清楚、问题也没搞清楚,还不如去看看 ...

嗯嗯,thankyou
 
个人签名亚里士缺德
 
 

回复

767

帖子

2

TA的资源

纯净的硅(初级)

15
 
临界代码保护区
 
个人签名物致DIY 欢迎你的加入~
QQ群:646461928 公众号:智物知心致成
小店
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表