怎么样让网站网址有图标海南建设银行招聘网站

张小明 2026/1/13 7:09:03
怎么样让网站网址有图标,海南建设银行招聘网站,wordpress 仿站步骤,企业建站免费模板嵌入式C编程时#xff0c;有一个奇怪的关键字volatile#xff0c;这到底有什么用呢#xff1f;volatile与编译器首先来看这样一段代码#xff1a;int busy 1; void wait() { while(busy) { ; }}编译一下#xff0c;注意#xff0c;这里使用O2优化#xff1a;让…嵌入式C编程时有一个奇怪的关键字volatile这到底有什么用呢volatile与编译器首先来看这样一段代码int busy 1; void wait() { while(busy) { ; }}编译一下注意这里使用O2优化让我们仔细看看生成的这段汇编wait: mov eax, DWORD PTR busy[rip].L2: test eax, eax jne .L2 retbusy: .long 1其中L2这一段即为while循环这段指令是经过编译器优化的可以看到决定能否跳出循环是通过检查寄存器eax来完成的而没有检查变量busy所在内存的真实内容。注意对于这段代码来说这里的优化是正确的但问题是如果还有其它代码修改了变量busy那么这里的优化会导致其它代码对变量busy的修改根本就不能生效就像这样int busy 1;// 该函数在A线程中执行void wait() { while(busy) { ; }}// 该函数在B线程中执行void signal() { busy 0;}如果wait函数中while循环对应的机器指令仅仅从寄存器中读取数据那么即使B线程的signal函数修改了busy变量也不能让wait函数从循环中跳出来。如果你对busy变量使用volatile修饰生成的指令就变成这样了wait:.L2: mov eax, DWORD PTR busy[rip] test eax, eax jne .L2 retbusy: .long 1注意看此时L2这一段每次都从busy变量所在的内存中读取数据并存放在eax然后再去判断这样就能确保每次都能读取到busy变量的最新值。实际上你可以把寄存器eax当做busy所在内存的cache当cache(寄存器)和内存中的数据一致时不会有任何问题但当cache与内存中的数据不一致时(也就是内存已被更新但cache保存的还是旧数据)程序的运行往往出乎预料。除了多线程的例子还有一类就是signal handler以及硬件修改该变量(用C语言与硬件交互式时经常遇到)如果编译器生成文章开头那样的指令那么等待线程将检测不到signal handler或者硬件对变量的修改。因此在这里我们需要告诉编译器“不要耍小聪明不要只从寄存器中读数据这个变量可能在其它地方已经被修改了使用时从内存中获取最新数据”。现在是时候简单总结一下了volatile仅仅阻止编译器试图去优化对变量的读取操作。volatile与多线程一定要注意volatile仅仅确保变量的可见性但和变量的原子访问没有半毛钱关系这是两个完全不同的任务。假设有一个非常复杂的结构体struct foo:struct data { int a; int b; int c; ...};volatile struct data foo; void thread1() { foo.a 1; foo.b 2; foo.c 3; ...}void thread2() { int a foo.a; int b foo.b; int c foo.c; ...}你仅仅用volatile去修饰变量foo只是确保了当该变量被thread1修改后我们能在thread2中读取到最新值但是这解决不了多线程并发读写需要原子访问foo的问题。确保变量原子性访问一般都采用锁当使用锁时锁本身就包含了volatile提供能力即确保变量的可见性因此当使用锁时没有必要使用volatile。volatile与memory order有的同学可能会想如果我想用volatile修饰的变量没有那么复杂仅仅是一个int就像这样volatileint busy 0;A线程读取busy变量B线程更新busy变量当A检测到busy变化后执行特定操作这样可行吗既然通过volatile修饰后可以确保每次都从内存中读取busy那么应该可以这样使用吧。然而计算机在概念上可能相对简单些但在工程实践中是复杂的。我们知道由于CPU与内存之间的速度差异非常大CPU与内存之间有一层cacheCPU其实并没有直接读取内存cache的存在会让问题复杂起来限于篇幅与本文主题这里不再展开。为优化内存读写CPU可能会对内存读写操作进行指令重排reordering带来的后果就是假设在线程1中先后执行第N行代码与第N1行代码但在线程2看来却是第N1行代码先生效假设X的初始值为0Y的初始值为1线程1 线程2X 10 if (!busy)busy 0; Y X;当线程2检测到busy为0后读取X的值此时读取到的X值可能为0。为解决这一问题我们需要的不是volatilevolatile解决不了reordering问题我们需要的是内存屏障memory barrier。内存屏障是一类机器指令该指令对处理器在该屏障指令之前与之后的内存操作进行了限制确保不会出现重排问题。而内存屏障带来的效果依然能够涵盖volatile提供的功能因此也不需要volatile。------------END------------不靠 MCU用 FPGA DAC 实现可调信号源嵌入式多线程从能跑到稳定的关键一步!
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

办个网站多少钱口碑营销成功案例简短

还在为Apache Doris集群的繁琐运维而头疼?手动配置节点、监控状态、处理故障恢复不仅耗时还容易出错!今天我要为你介绍Apache Doris官方提供的强大管理工具——Doris Manager,这款专为Doris设计的管理平台将彻底改变你的运维体验。 【免费下载…

张小明 2026/1/8 22:32:06 网站建设

黄岛网站制作wordpress主题漂亮

微信多账号管理神器:一键检测好友关系,轻松管理所有社交圈 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/Wechat…

张小明 2026/1/1 22:35:55 网站建设

凡客建站快车linux中wordpress

对于手游CPS(Cost Per Sale,按销售计费)推广业务而言,轻量云服务器(Lightweight Cloud Server)通常是比传统VPS更优的选择。以下是基于手游CPS业务场景(如搭建落地页、跑量测试、挂脚本等&#…

张小明 2026/1/13 0:09:39 网站建设

西安网站建设公司排行榜漳州最专业的网站建设公司

GetQzonehistory完整指南:5分钟学会备份QQ空间所有历史数据 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里的珍贵回忆丢失吗?GetQzonehistory是…

张小明 2026/1/6 13:48:04 网站建设

服装定制网站源码网站开发制作

行业背景矿业作为国民经济的重要支柱,面临资源紧缺、成本上升及环保压力。而传统人工巡检与监管模式效率低下,越来越难以适应智能设备需求,导致生产效率低及安全事故风险。伴随着物联网、大数据与云计算技术的发展,为矿山数字化转…

张小明 2026/1/13 0:09:40 网站建设

竭诚网络网站建设东莞横沥三江工业区

目录 1.什么是网络安全 1.1 网络安全的定义:1.2 信息系统(Information System)1.3 信息系统安全三要素(CIA)1.4 网络空间安全1.5 国家网络空间安全战略1.6 网络空间关注点1.7 网络空间安全管理流程 2.网络安全术语3.…

张小明 2025/12/26 9:25:55 网站建设