社区
Linux/Unix社区
帖子详情
在用户态如何使用原子操作?
abc00000001
2010-01-14 11:47:47
要求连续几个操作不能被打断。
类似于:
u16 t1, t2;
raw_local_irq_save(flg)
t1 = timer[1];
t2 = timer[2];
raw_local_irq_restore(flg);
//do something
...全文
650
7
打赏
收藏
在用户态如何使用原子操作?
要求连续几个操作不能被打断。 类似于: u16 t1, t2; raw_local_irq_save(flg) t1 = timer[1]; t2 = timer[2]; raw_local_irq_restore(flg); //do something
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
abc00000001
2010-01-14
打赏
举报
回复
[Quote=引用 5 楼 fetag 的回复:]
引用 2 楼 abc00000001 的回复:
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)
我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)
你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?
[/Quote]
有这个需求,另外它是实时进程,FIFO 调度方式。时间尺度是10us级别的,就这个原子操作而言,要求在少于0.125us(125ns)内保证完成相关操作(CPU@312MHZ)
所以,怎么关中断能保证它的性能不受大的影响?
独孤过儿
2010-01-14
打赏
举报
回复
[Quote=引用 2 楼 abc00000001 的回复:]
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)
我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)
[/Quote]
你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?
fpcc
2010-01-14
打赏
举报
回复
或者用事件或信号,只有执行完某些动作,才发出工作信号,进行下一步动作,很多的方法啊。
fpcc
2010-01-14
打赏
举报
回复
那你就把必须做完的锁里加一个控制变量,如果不做完,控制变量就为FALSE,然后下面加一个判断不就成了。
abc00000001
2010-01-14
打赏
举报
回复
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)
我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)
独孤过儿
2010-01-14
打赏
举报
回复
可以用互斥锁来实现pthread_mutex_lock()
独孤过儿
2010-01-14
打赏
举报
回复
所以,怎么关中断能保证它的性能不受大的影响?
=================================
当然是在尽可能小的block内关中断了。也就是这样的结构:
// 关中断
原子操作块
// 开中断
但是要尽量的使 原子操作块 的语句少一些,压缩到最低!只把那些必须执行原子操作的语句放在这里,其余不必要的或者不是很紧要的一律放到外面去,这样就能保证开关中断的时间差最小了
Linux基础 --
用户
态
原子操作
之3种实现
在Linux
用户
态
编程中,
原子操作
通常
使用
内建的
原子操作
函数或GCC提供的内置函数来实现。这些操作可以保证在多线程环境中数据的同步和一致性。
MongoDB
原子操作
详解
原子操作
是指在执行过程中不可中断的操作,它要么完全执行成功,要么完全不执行。换句话说,在执行
原子操作
的过程中,不会受到外部因素的干扰,确保数据的完整性和一致性。MongoDB 的
原子操作
是确保数据一致性和完整性的核心特性之一。通过对单个文档的原子性保障,MongoDB 使得开发者能够在高并发环境中放心地进行数据处理。同时,随着多文档事务的引入,MongoDB 进一步增强了对复杂操作的支持。理解和合理
使用
MongoDB 的
原子操作
,对于确保数据的可靠性和应用程序的稳定性至关重要。
linux
原子操作
在这个示例中,
使用
了互斥锁pthread_mutex_t来保护临界区,确保对atomic_counter的递增操作是原子的。
原子操作
函数:Linux内核提供了一些
原子操作
函数,可以用于执行不可中断的
原子操作
。与Linux内核中的
原子操作
不同,
用户
空间的
原子操作
不是由硬件提供的原子指令,而是通过特殊的软件库函数或编译器内置函数来实现的。以下例子展示如何在Linux内核模块中
使用
原子操作
函数来执行一个原子的计数器递增操作。Linux内核中的
原子操作
是一种操作,它是不可中断的,不会被其他处理器中断或调度的操作。
Go语言
原子操作
什么是
原子操作
呢?
原子操作
就是具备原子性的操作,一个或者多个操作在cpu的执行过程中不被中断的特性,称为原子性,这些操作对外表现为一个不可分割的整体,要么全部执行,要么全部不执行;为了保证并发安全,可以
使用
Go语言的sync包中的Mutex类型调用加锁和解锁的方法,但是加锁操作因为涉及内核
态
的上下文切换会比较耗时、代价比较高,对于基本数据类型我们还可以
使用
原子操作
来保证并发安全,因为
原子操作
在
用户
态
就可以完成,所以性能比加锁操作更好,更能利用计算机的优势,对应的
原子操作
在内置的标准库sync/atomic可
用户
态
的原子变量
GCC(GNU Compiler Collection)内建
原子操作
函数说明 6.51 Legacy __sync Built-in Functions for Atomic Memory Access 编译器内建,可以代替多线程全局变量自加、自减等操作,并且效率高于
使用
线程锁。 type为8字节以下的整形数 函数(加、减、与、或、非、异或)共12个: type __
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章