热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

在用户态如何使用原子操作?

要求连续几个操作不能被打断。类似于:u16t1,t2;raw_local_irq_save(flg)t1timer[1];t2timer[2];
要求连续几个操作不能被打断。

类似于:
u16 t1, t2;

raw_local_irq_save(flg)

t1 = timer[1];
t2 = timer[2];

raw_local_irq_restore(flg);

//do something

7 个解决方案

#1


可以用互斥锁来实现pthread_mutex_lock()

#2


pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)

#3


那你就把必须做完的锁里加一个控制变量,如果不做完,控制变量就为FALSE,然后下面加一个判断不就成了。

#4


或者用事件或信号,只有执行完某些动作,才发出工作信号,进行下一步动作,很多的方法啊。

#5


引用 2 楼 abc00000001 的回复:
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

 我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)

你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?

#6


引用 5 楼 fetag 的回复:
引用 2 楼 abc00000001 的回复:
pthread_mutex_lock 能保证 mutex 互斥,但不能保证CPU时间不被打断啊(当然例中操作很少有机会被打断)

我需要保障CPU只有执行完了这几个操作,才能去执行其它操作(用户态)

你要是想保证不被CPU中断,那就只能是关中断了,可是你的程序能有那么高的权限吗?


有这个需求,另外它是实时进程,FIFO 调度方式。时间尺度是10us级别的,就这个原子操作而言,要求在少于0.125us(125ns)内保证完成相关操作(CPU@312MHZ)

所以,怎么关中断能保证它的性能不受大的影响?

#7


所以,怎么关中断能保证它的性能不受大的影响?
=================================
当然是在尽可能小的block内关中断了。也就是这样的结构:

// 关中断
原子操作块
// 开中断

但是要尽量的使 原子操作块 的语句少一些,压缩到最低!只把那些必须执行原子操作的语句放在这里,其余不必要的或者不是很紧要的一律放到外面去,这样就能保证开关中断的时间差最小了

推荐阅读
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 在没有功能代码的C++控制台应用程序中,观察到有三个线程在运行。根据Stack Overflow的解释,Windows操作系统为了加速进程启动,会在程序开始执行时利用多个CPU内核进行快速初始化,这涉及到`ntdll.dll`库的调用。通过深入了解这些线程的行为,可以更好地进行性能优化,提高应用程序的响应速度和效率。 ... [详细]
  • 机顶盒,即数字电视机顶盒(Digital TV Set-Top Box,简称STB),是一种放置在电视机旁的设备。它主要用于将数字信号转换为电视能够识别的模拟信号,从而实现高质量的视频和音频播放。机顶盒不仅支持基本的电视节目接收功能,还具备多种增值服务,如互动点播、网络浏览等。随着技术的发展,现代机顶盒集成了更多的智能功能,成为家庭娱乐的重要组成部分。 ... [详细]
  • 在Ubuntu 20.04上安装Zotero时,压缩包中包含一个`.desktop`文件,可以方便地将Zotero添加到系统启动器中。建议将解压后的目录移动到合适的位置,如`/opt/zotero`,以便更好地管理和维护。此外,确保赋予该目录适当的权限,以确保Zotero能够正常运行。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 深入解析GBASE系列中的列存储分析型数据库GBase 8a
    市场定位方面,GBase 8a 是 GBASE 系列中的一款高性能列存储分析型数据库,专为大规模数据仓库和实时分析场景设计。该数据库采用先进的列式存储技术,能够显著提升查询性能和数据压缩效率,适用于金融、电信、互联网等行业的大数据分析需求。此外,GBase 8a 还支持分布式部署,具备高可用性和可扩展性,能够满足企业级应用的严苛要求。 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 电脑显示器内部电路结构图解与工作原理分析 ... [详细]
  • 字节跳动青训营:Go语言进阶培训与依赖管理深入解析
    本文详细探讨了字节跳动青训营中关于Go语言进阶培训的核心内容,重点讲解了并行与并发的区别、Goroutine的使用、CSP模型及Channel机制在并发安全中的应用,并介绍了LockWithGroup的实现方式。此外,文章还深入解析了Go语言的依赖管理机制,包括GoPath、GoVendor和GoModule的使用方法及其在依赖分发和回源过程中的作用。 ... [详细]
  • 开发日志:磁盘读取技术详解——CHS模式的应用与解析
    开发日志:磁盘读取技术详解——CHS模式的应用与解析 ... [详细]
  • 来宾 | Vmware ESXi 平台下的虚拟机在线管理与技术支持
    来宾 | Vmware ESXi 平台下的虚拟机在线管理与技术支持 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
author-avatar
飞儿gxj_505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有