侵权投诉

如何解决像乱序执行又像内存屏障的BUG

程序人生 ? 2021-07-26 09:32 ? 次阅读
单核环境y也是0:其中一位非常细心的读者针对这个多核竞争造成问题的结论进行了验证,亲身在单核的环境ECS上实验,结果发现结果照样y=0。

后发先至:另外一位读者则给出了一个更奇怪的现象,两个变量中后执行的代码看起来却先被调用了。

加个if问题竟然解了:最后一个反馈留言最令人崩溃,在代码中随便加上个判断语句,不但解决了y=0的问题,性能还非常好。

1难道这就是传说中的乱序执行?

先来看以下读者回复的代码:

package main import (“fmt”“sync/atomic”“time”) func main() {var x int32var y int32 go func() {for { x = atomic.AddInt32(&x, 1) y = atomic.AddInt32(&y, 1) } }() time.Sleep(time.Second) fmt.Println(“x=”, x) fmt.Println(“y=”, y)}

在这部分内容中,两个变量x和y都是由原子操作Automic.Add来保证并发安全的,但是结果输出出来我们可以发现y竟然比x还大?而且每次运行的情况基本都是y更大,只是大多少有所区别。

x= 49418397y= 49425282成功: 进程退出代码 0.

看到这个输出结果,我第一反应感觉这是乱序执行的衍生现象,因为x和y的加1操作彼此是独立的,虽然编译器不会优化执行顺序,但是在CPU的执行层面有可能会对于前后无依赖的操作打乱顺序执行。这样一来就的确有可能出现后面的操作先执行的情况。

但是仔细一想这样的说法应该并不合理,如果是乱序执行的原因,那么上面这段代码的执行结果肯定不会每次结果都是y更大一些,每次执行都是y比x更大只能说明代码是按照一定顺序执行的,而且目前的CPU指令流水线的预测功能肯定还没有牛到能够完全知晓x与y的值不按照顺序提交是没有作何影响的地步。

2仔细一看还是多并发竞争问题

再来看以下代码,

package main import (“fmt”“sync/atomic”“time”) func main() {var x int32var y int32 go func() {for { x = atomic.AddInt32(&x, 1) y = atomic.AddInt32(&y, 1) } }() time.Sleep(time.Second) x1 := x y1 := y fmt.Println(“x=”, x1) fmt.Println(“y=”, y1)}

只要把fmt.println之前先把x和y的值拷贝出来到x1与y1,再打印x1与y1的值就基本没有这个误差了。

x= 51061072y= 51061071成功: 进程退出代码 0.

这也就是说,fmt.println在执行中间,go func中的子gorouine又被调度了。所以y比x的值大,本质又是一个多并发的竞争问题。而不是乱序执行的原因,只是这个问题在Go的开发模式下也是非常隐蔽。

3崩溃了,单核怎么也是0

再说第二个令人崩溃的读者反馈,他在单核的云ECS尝试运行以下代码,

package main import (“fmt”//“sync/atomic”“time”) func main() {var x int32var y int32 go func() {for { x++ y++ } }() time.Sleep(time.Second) fmt.Println(“x=”, x) fmt.Println(“y=”, y)}

结果也是0。刚开始我觉得这个读者反馈有误,因此我也立刻在阿里云的X86集群与华为云的鲲鹏集群分别申请了一台单核ECS,不过结果令人崩溃,无论是ARM还是X86单核平台运行上述代表的结果也还是0,不过这还没完。

4更崩溃了,随随便便加个if竟然杀疯了…。

接下来是最令人崩溃的时刻,我们来看以下代码:

package main import (“fmt”//“sync/atomic”“time”) func main() {var x int32var y int32 z := 0 go func() {for { x++//一些无需关注并发安全的计算问题 y++if z 》 0 { fmt.Println(“z is”, z)//这一行代码不会执行到 } } }() time.Sleep(time.Second)//定时执行,超过1秒钟就停止了,无需关注并发安全 fmt.Println(“x=”, x) fmt.Println(“y=”, y)}

这段代码在没有作何锁或者互斥体的基础上竟然解决了y=0的问题,而且令人崩溃的是,这段代码的执行效率竟然还非常惊人,比之前Automic的方式至少快一个数量级,

如果是这样的话那么这种代码方案就非常适合于不需要并发控制,并且定时需要结束的计算场景,假如我一个计算任务只能给1秒钟,能算得出来就算,算不出来就解下一题了,那么if的方案就非常适合了。

x= 407698730y= 407745938成功: 进程退出代码 0.

在解释if分支这个非主流的方案之前,我们再来看一下互斥体这种主流并发同步方案。

互斥体实现如下:

package main import (“fmt”“sync” //“sync/atomic”“time”) func main() {var x int32var y int32var mutex sync.Mutex go func() {for { mutex.Lock() x++ y++ mutex.Unlock() } }() time.Sleep(time.Second) x1 := x y1 := y fmt.Println(“x=”, x1) fmt.Println(“y=”, y1)}

运行结果如下:

x= 50889322y= 50889322成功: 进程退出代码 0.

我们可以看到互斥、原子操作等方法最终运行结果基本都在一个数量级以内上下浮动,幅度不超过10%,对比之下if的方案实在是杀疯了,直接比上述这种安全的写法性能好出一个数量级!随便加入个if分支,竟然也能解决y=0,而且还是高效解决这到底是为什么?

5关键时刻汇编令人心安,大神一语道破

在我的知识储备实在无法解释以上现象的时候,我只能将希望诉诸objdump,将gobuild生成的可执行文件来进行反编译,通过查看汇编语言代码来寻找问题解释的蛛丝马迹。不看不知道一看还真是有惊喜,加了if语句和加锁等方式一样全部会加上内存写屏障writeBarrier。具体如下:

未加if的汇编结果

0000000000499400 《main.main.func1》:499400: eb 00 jmp 499402 《main.main.func1+0x2》499402: eb 00 jmp 499404 《main.main.func1+0x4》499404: eb 00 jmp 499406

《main.main.func1+0x6》499406: eb fa jmp 499402 《main.main.func1+0x2》499408: cc int3499409: cc int349940a: cc int3 49940b: cc int349940c: cc int349940d: cc int3.。。省略0000000000499420 《type..eq.[2]interface {}》:499420: 64 48 8b 0c 25 f8 ff mov %fs:0xfffffffffffffff8,%rcx499427: ff ff499429: 48 3b 61 10 cmp 0x10(%rcx),%rsp 49942d: 0f 86 cf 00 00 00 jbe 499502 《type..eq.[2]interface {}+0xe2》499433: 48 83 ec 50 sub $0x50,%rsp

加了if或者锁的汇编结果

wirteBarrier有点类似于文件操作中flush的作用,会强制把数据由缓存同步到内存当中去,因此我前文中所说两个变量其中一个加锁,另一个结果也能不为0是因为他们在同一缓存行原因解释也不对,x和y并不是因为在同一个缓存行所以才被一起同步回内存的,而是由于wirteBarrier这个屏障所引入的。我们来看下面的代码。

package main import (“fmt”//“sync/atomic”“time”) func main() {var x int32var y int32 slice := make([]int, 10, 10) z := 0 go func() {for { x++ y++for index, value := range slice { slice[index] = value + 1 }if z 》 0 { fmt.Println(“z is”, z) } } }() time.Sleep(time.Second) fmt.Println(“x=”, x) fmt.Println(“y=”, y) fmt.Println(“slice=”, slice)}

他的运行结果是:

x= 86961625y= 86972610slice= [86978588 86979075 86979101 86979417 86979435 86979452 86979464 86979771 86979793 86979807]成功: 进程退出代码 0.

我造出来长度为10整形切片,缓存行一般只有64BYTE,那么这个切片上面的数据是不可能在同一缓存行上的,通过这段代码的执行结果可以看到所有切换的值全部被更新了,因此我们可以了解writeBarrier这个内存写屏障的功能是将之前所有的数据全部强制回写到内存当中。

我对于单核ECS中运行的结果也是y=0的结果有了一定的认识,由于ECS虚拟机运行的主体也是物理机,而物理机肯定不是单核的,因此不执行writeBarrier这个写屏障语句,数据也无法刷回内存,虽然程序运行在单核虚拟机上,而虚拟机并不会把汇编指令再做包装,这也就造成实际的执行与多核环境没有什么差别。

6if为什么会被如此安排

实在中If不但实际达到了内存同步的效果,而且还效率更高,看起来非常适合这种没有强制同步需要的使用场景。不过我们不禁要问为什么编译器要在出现if语句时显式调用内存屏障。个人猜测原因有两个,

if判断使用真实值是隐含的前提:首先在进行判断时,使用缓存中的数据可能会带来显而易见的问题:因为在做判断时程序员一般是要求用目前变量的实际值而不是缓存值来进行的,这是一个隐含的前提,可能编译器在优化时考虑到了这一点。

指令流水线的原因:我们知道CPU的每个动作都需要用晶体震荡而触发,以加法ADD指令为例,想完成这个执行指令需要取指、译码、取操作数、执行以及取操作结果等若干步骤,而每个步骤都需要一次晶体震荡才能推进,因此在流水线技术出现之前执行一条指令至少需要5到6次晶体震荡周期才能完成。如下图:

为了缩短指令执行的晶体震荡周期,芯片设计人员参考了工厂流水线机制的提出了指令流水线的想法,由于取指、译码这些??槠涫翟谛酒诓慷际嵌懒⒌?,完成可以在同一时刻并发执行,那么只要将多条指令的不同步骤放在同一时刻执行,比如指令1取指,指令2译码,指令3取操作数等等,就可以大幅提高CPU执行效率:

以上图流水线为例 ,在T5时刻之前指令流水线以每周期一条的速度不断建立,在T5时代以后每个震荡周期,都可以有一条指令取结果,平均每条指令就只需要一个震荡周期就可以完成。这种流水线设计也就大幅提升了CPU的运算速度。

但是if分支会造成流水线的停顿,也就是说指令流水线系统无法确定在指令1执行时确定指令7的具体情况。那么在if时加上writeBarrier这种耗时操作其实也就可以理解了,反正if也造拖慢执行速度,那编译器也就不在乎在此时加上另外的耗时操作了。

7Rust为什么令人羡慕

不过在看了一段时间的Rust后,我感觉Rust的优势是可以避免程序员犯很多错误,而这其中所谓的错误虽然看起来低级,但是如果他们被隐藏在千万行代码之中,那么排查起来真是相当费时费力,由于已经是所有权转移了,因此变量的使用不太会出现像Go一样的错误情况,这点我们在上一篇文章中已经有所论述了,而且我们来看以下代码:

use std::thread;use std::mpsc;use std::Duration; fn main() {let (tx, rx) = mpsc::channel();let tx1 = mpsc::clone(&tx); //增加一个发送者tx1,需要clonelet tx2 =

mpsc::clone(&tx); //增加一个发送者tx2,需要clone thread::spawn(move || {let vals = vec?。跾tring::from(“I‘m”),String::from(“from”),String::from(“the”),String::from(“tx it self”), ]; for val in vals { tx.send(val).unwrap(); }}); thread::spawn(move || {let vals = vec!

[String::from(“I’m”),String::from(“from”),String::from(“the”),String::from(“tx1”), ]; for val in vals { tx1.send(val).unwrap(); }}); thread::spawn(move || {let vals = vec?。跾tring::from(“I‘m”),String::from(“from”),String::from(“the”),String::from(“tx2”), ]; for val in vals { tx2.send(val).unwrap(); }}); for received in rx { //一个通道一个接收者,接收若干个发送者的信息 println?。ā癎ot: {}”, received);} }

可见Rust中连管道的多路并发的管理使用都要通过clone的方式来安全传递信息,个人根本想不到用Rust编程怎么能出现像上面例子中Go造成的Bug,因此Rust的学习曲线虽然陡峭,但是感觉Rust程序包往往只掌握原生的框架就可以做得很好了,而不像Python、Java除了原生语言知识以外,还需要学习熟练运用各种第三方的包。

马超,CSDN博客专家,阿里云MVP、华为云MVP,华为2020年技术社区开发者之星。

编辑:jq

原文标题:远看像乱序执行,近看是内存屏障的 BUG 是如何解决的?

文章出处:【微信号:coder_life,微信公众号:程序人生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

待机电流过高bug如何解决
待机电流过高bug如何解决
发表于 10-13 06:42 ? 0次 阅读
一本教你怎么写出让同事无法维护的代码
?对,你没看错,本文就是教你怎么写出让同事无法维护的代码。一、程序命名 容易输入的变量名 。比如:F....
的头像 Linux爱好者 发表于 10-11 15:45 ? 171次 阅读
苹果官方确认部分iPhone13存在bug
9月24日,苹果iPhone 13系列迎来正式开售,提供四款机型,售价5199元起。 众多消费者为了....
的头像 Les 发表于 09-26 11:19 ? 2142次 阅读
苹果确认部分iPhone13存在bug
近日,苹果正式发布的旗舰iPhone 13系列被用户爆出存在一些bug,而就在刚刚不久,苹果公司也承....
的头像 lhl545545 发表于 09-26 09:54 ? 1333次 阅读
STM32的BUG是代码的错误吗
2010-4-8 1: 45 下面的函数中有一个BUG, 也就是SR2不能用WHILE来轮询,而应直接读出.如下面代码段, 因此,在这里说的这是...
发表于 08-11 07:42 ? 0次 阅读
帧中断与字节中断混用的BUG
帧中断与字节中断混用的玄学BUG
发表于 08-06 06:55 ? 0次 阅读
教大家怎么样才能在日??⒅屑跎賐ug
1. 数据库篇 数据库篇的话,哪些地方容易导致bug出现呢?我总结了7个方面:慢查询、数据库字段注意....
的头像 上海磐启微电子有限公司 发表于 07-19 09:19 ? 276次 阅读
浅析新塘031 串口PDMA通信
环境搭建这里就跳过了,没啥用,我还是用KEIL 5 开发,自行下载个PACK包安装就好了。点此前往新....
的头像 嵌入式ARM 发表于 07-06 17:16 ? 597次 阅读
浅析新塘031 串口PDMA通信
掌握这几种方法 你的接口查询速度将飞速提升
1. MySQL查询慢是什么体验? 大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的....
的头像 马哥Linux运维 发表于 07-06 14:38 ? 414次 阅读
用Cocos引擎远程真机设备来开发鸿蒙游戏教程
6 月 25 日,新鲜出炉的 DevEco 2.2 beta 提供了远程真机调试,而上周 6 月 1....
的头像 HarmonyOS技术社区 发表于 06-30 08:56 ? 440次 阅读
用Cocos引擎远程真机设备来开发鸿蒙游戏教程
谨防软件定义汽车中的软件浅坑:BUG
软件定义汽车,是目前几乎所有汽车厂商都挂在嘴边的一个概念,其核心是智能汽车的价值从硬件向软件转移。
的头像 汽车与新动力 发表于 06-17 10:44 ? 344次 阅读
Hi3861 LiteOS SDK bug report
在 hi_wifi_csi_api.h 这个头文件夹下面有这样一个结构体:hi_wifi_csi_entry 这个结构体里面有mac地址的数组,但是这个mac地...
发表于 06-12 18:49 ? 176次 阅读
苹果ios15.1更新了什么 ios15更新内容
iOS 15系统现在已经正式发布了,那么,苹果iOS15更新了哪些功能内容?苹果iOS15系统值得更....
的头像 lhl545545 发表于 06-09 10:12 ? 4964次 阅读
教你们怎么搭建一个拖垮公司的技术架构?
架构师不仅拿钱多,还受到程序员的崇拜、妹子的仰慕。 他们走路带风、出场自带BGM,吹啊吹,我的骄傲放....
的头像 Linux爱好者 发表于 05-06 11:24 ? 790次 阅读
使用编程器编写芯片出现不良品率的原因是什么?
使用编程器编写芯片出现不良品率的原因是什么? 为什么MCU容易烧写坏? ...
发表于 04-19 06:48 ? 101次 阅读
【每日一知识点】如何进行编程可以减少程序的 bug?
在此提供一些建议,因系统中实际运行的参数都是有范围的。系统运行中要考虑的超范围管理参数有:物理参数。这些参数主要是系统的...
发表于 04-02 13:32 ? 2390次 阅读
Unc0ver越狱工具发布最新稳定版 修复所有bug
据了解,Unc0ver越狱已经发布了对iOS 14到iOS 14.3全部有效并兼容所有iPhone机....
的头像 lhl545545 发表于 03-16 16:58 ? 2853次 阅读
Windows 10用户吐槽系统屏幕出现渲染问题
不少Windows 10用户之前都抱怨一个问题,那就是系统的屏幕出现了渲染问题,而微软也是终于出手解....
的头像 lhl545545 发表于 02-19 09:19 ? 892次 阅读
三星Galaxy S21 系列深度评测
三星于1月正式发布了年度旗舰Galaxy S21 系列,包含 S21 5G、S21+ 5G、S21 ....
的头像 lhl545545 发表于 02-18 14:25 ? 4806次 阅读
用户吐槽三星Galaxy S21系列出现耗电激增
多个媒体报道称,许多Exynos版Galaxy S21用户对于包含二月安全补丁在内的系统更新有抱怨—....
的头像 lhl545545 发表于 02-18 13:55 ? 3444次 阅读
"可重入"和"线程安全"是两个概念 千万不要搞混了
? 大伙估计在多任务程序中使用printf打印一些信息是非?;独值囊患?,运气不错的话偶尔错几个数据....
的头像 嵌入式ARM 发表于 02-10 17:38 ? 691次 阅读
"可重入"和"线程安全"是两个概念 千万不要搞混了
我在服务器上执行了rm -rf *
前情提要 前段时间,我在一个非公开的 Bug 赏金项目里发现了一个严重的漏洞,这个漏洞可以允许远程执....
的头像 Linux爱好者 发表于 02-02 13:56 ? 557次 阅读
sudo中存在一个严重的漏洞:无需密码就能获取root权限
“这可能是近期内最需要重视的sudo漏洞?!?程序员都知道,一句sudo可以“为所欲为”。 ? 而现....
的头像 Linux爱好者 发表于 02-02 11:14 ? 1350次 阅读
sudo中存在一个严重的漏洞:无需密码就能获取root权限
苹果iOS 14.4更新:修复Bug、检测非官方摄像头零件
今天,苹果终于发布了iOS 14.4的更新,新系统带来不少改进,对于iPhone用户来说,还是非常值....
的头像 工程师邓生 发表于 01-27 10:21 ? 1534次 阅读
苹果面向开发人员推送iOS 14.4 RC版更新页面
早在去年年底,苹果就推出了全新的iOS 14.4/iPadOS 14.4开发者预览版系统。但是苹果发....
的头像 lhl545545 发表于 01-22 10:37 ? 1054次 阅读
苹果重磅发布iOS 14.4标准正式版
今天苹果发布了iOS 14.4的准正式版,除了一些Bug的修复外,同时增加了一些新的功能和调整。
的头像 lhl545545 发表于 01-22 10:19 ? 5500次 阅读
微软 Win10 最新系统依旧Bug 存在:开机会进入恢复模式无法启动、无法自动修复
1月21日消息 据外媒 Aroged 消息,微软 Win10 最新的系统更新后,依旧有一些 Bug ....
的头像 工程师邓生 发表于 01-21 10:29 ? 1465次 阅读
微信bug后企业微信又崩溃 腾讯致歉:已经修复
前天微信出现了bug,很多人无法接收到信息,微信刚道完歉,今天企业微信也崩溃了。 昨天下午,不少网友....
的头像 工程师邓生 发表于 01-20 13:31 ? 1471次 阅读
部分 M1 Mac 出现 bug:使用快速用户切换时会触发自动注销弹出屏保
据多个外媒报道,有部分 M1 Mac 用户在使用快速用户切换时会触发一种 bug,这个不过会导致用户....
的头像 工程师邓生 发表于 01-19 09:37 ? 565次 阅读
微软ARM PC模拟运行64位程序功能崩溃
去年12月,微软面向会员用户开放了ARM平台下对模拟64位程序的支持。
的头像 lhl545545 发表于 01-18 09:33 ? 694次 阅读
《赛博朋克2077》Steam版在线玩家流失90%
作为PC史上最畅销的游戏,《赛博朋克2077》首日发售就获得了800万的销量,一周内销量高达1300....
的头像 lhl545545 发表于 01-07 09:39 ? 751次 阅读
口碑翻车、bug不断 《赛博朋克2077》将回炉打磨
去年12月10日,CDPR在多次跳票之后终于推出了《赛博朋克2077》,它确实是2020年最值得期待....
的头像 工程师邓生 发表于 01-05 15:19 ? 956次 阅读
升级One UI 3.0三星手机出现Bug:进入2021年 电池统计信消失
三星已经向多款机型推送了基于安卓11的One UI 3.0,包括Galaxy S20系列、Galax....
的头像 工程师邓生 发表于 01-04 10:27 ? 2474次 阅读
机器编程:自动编程还能自主检测Bug,有望成为一种强大的生产力工具
机器编程与机器学习有很大的不同,机器编程是教系统自己编程。虽然还处于早期阶段,但这种新颖的自我监控系....
的头像 Les 发表于 01-04 10:24 ? 1141次 阅读
用户吐槽AirPods Max 主动降噪存在 bug
苹果耳罩式耳机 AirPods Max 已经开售一段时间了,有用户反映遇到了耳机在主动降噪和通透模式....
的头像 lhl545545 发表于 12-31 15:33 ? 1083次 阅读
爆料称Windows 10 21H1功能更新 大幅改善Bug、提高性能
虽然不少工程师提前休假,但是微软并没有放松Windows 10 21H1更新的推进工作。 据外媒Wi....
的头像 工程师邓生 发表于 12-31 10:57 ? 2910次 阅读
OPPO Reno 10倍变焦版评测一览
12月29日,@ColorOS 宣布,OPPO Reno 10倍变焦版和Reno Ace升级Colo....
的头像 lhl545545 发表于 12-29 11:45 ? 1549次 阅读
Apple Store中国官网出现Bug价格
苹果中国官网价格乌龙的事情,引起了很多用户的不满,主要还是苹果处理方式太过于激进?
的头像 lhl545545 发表于 12-26 09:49 ? 740次 阅读
苹果称价格乌龙订单将被取消
12 月 25 日消息 近日苹果官网部分产品出现了标价错误的问题,上千元的产品只卖一两百,不少用户趁....
的头像 lhl545545 发表于 12-26 09:07 ? 888次 阅读
苹果中国官网商店惊现价格乌龙
从来只有苹果的“割肾行动”,很少有人能薅到苹果羊毛。
的头像 lhl545545 发表于 12-25 09:37 ? 1036次 阅读
下架处理:苹果Apple Store中国官网出现Bug
12月23日晚间,有多位网友发文表示,他们在Apple Store中国官网上下单购买了价格出奇的商品....
的头像 lhl545545 发表于 12-24 10:41 ? 1070次 阅读
赛博朋克2077针对PC和主机平台推出1.06补丁
说起近来讨论度最高的游戏新作,《赛博朋克2077》绝对是当仁不让的第一名。这款备受玩家期待的大作,在....
的头像 lhl545545 发表于 12-24 10:32 ? 915次 阅读
小米米家APP正式发布6.0版本
今天,米家APP正式发布6.0版本,带来了6项重大更新。新版采用全新视觉风格,简约温暖,还有多种壁纸....
的头像 lhl545545 发表于 12-24 10:13 ? 835次 阅读
苹果开始向安全研究人员寄出特别配置iPhone:更容易发现 Bug
苹果在 7 月宣布推出新的苹果安全研究设备计划,该计划旨在为研究人员提供特别配置的 iPhone,这....
的头像 工程师邓生 发表于 12-23 14:29 ? 614次 阅读
Mozilla 计划移除网站特定浏览(SSB)功能
Mozilla 计划移除网站特定浏览(SSB)功能。至于移除该功能的原因就是该模式存在非常多的 BU....
的头像 工程师邓生 发表于 12-16 16:14 ? 788次 阅读
微软修复Chrome和Edge中的左键单击Bug
作为向下一个重大更新迈进的重要一步,微软已计划在明年为 Edge 浏览器引入一系列新功能。其中包括崭....
的头像 工程师邓生 发表于 12-11 11:59 ? 1304次 阅读
WinRAR 6.0正式版即将发布
提到压缩软件,当年的WinZip现在几乎没什么人想起来了,国内熟悉的还是WinRAR,从DOS时代就....
的头像 lhl545545 发表于 12-09 08:51 ? 1402次 阅读
压缩软件WinRAR 6.0正式版发布:修复bug为主
提到压缩软件,当年的WinZip现在几乎没什么人想起来了,国内熟悉的还是WinRAR,从DOS时代就....
的头像 工程师邓生 发表于 12-08 17:53 ? 1848次 阅读
全都卡得要命:NVIDIA显卡出现Bug
TPU的编辑最近在评测中发现了一个奇怪的现象:在一个较老的平台上,更换了一块NVIDIA显卡,但系统....
的头像 lhl545545 发表于 12-07 10:07 ? 949次 阅读
全都卡得要命:NVIDIA显卡出现Bug
AMD Radeon 20.11.3驱动:修复RX 6000性能过低bug
RX 6000系列显卡发布一个月了,RX 6800 XT及RX 6800显卡的性能很好很强大,不过要....
的头像 工程师邓生 发表于 12-01 10:53 ? 1182次 阅读
Bug一点也没减少:Win10连遭用户吐槽
从第一版Win10发布至今,已经将近6个年头了。尽管这期间微软一直都在改呀改,可现实中大家的吐槽却一....
的头像 lhl545545 发表于 12-01 09:42 ? 1022次 阅读
腾讯微视回应120GB一夜爆满:日志组件出现Bug导致,已经第一时间修复
近日有网友发帖称,自己的一部256GB空间华为手机,在日常使用量只有120GB左右的情况下,突然一夜....
的头像 工程师邓生 发表于 11-26 16:32 ? 1318次 阅读
微软一次性修复Windows 10诸多Bug
今天微软针对Windows 10又进行了更新,而此番不为别的就是修复Bug。 面向Beta和Rele....
的头像 工程师邓生 发表于 11-24 13:25 ? 600次 阅读
MIUI在印度向Redmi Note 9 Pro推送了Android 11底层更新
据XDA报道,MIUI在印度向Redmi Note 9 Pro推送了Android 11底层更新。
的头像 lhl545545 发表于 11-19 09:52 ? 906次 阅读
用户近日曝光 iPhone 12 的一个奇怪的充电 bug
近日有用户曝光了 iPhone 12 的一个奇怪的充电 bug,多口适配器在为该机充电时都会受影响。
的头像 lhl545545 发表于 11-16 14:31 ? 911次 阅读
Windodws 10更新的meticulous介质创建工具存在一个BUG
除了系统自带的更新程序,微软还提供了媒体介质创建工具、易升等软件方便用户升级最新版本。
的头像 lhl545545 发表于 11-16 09:03 ? 613次 阅读
最难调试的Bug是什么样的?
你碰到过的最难调试的 Bug 是什么样的?
发表于 06-10 13:32 ? 239次 阅读
如何评估INT/UINT的基本知识?
我试图弄清楚基本的整数除法是怎么回事,它似乎得到一个无符号的无符号强制转换……片段:/*******/**文件作用域变量**/易失性静...
发表于 11-06 09:20 ? 364次 阅读
多功能万年历分享!
还有些BUG还没来及修正,但是作品已近上交,视频忘拍了。功能强大,具体功能请见代码。 (375.41 KB )...
发表于 10-28 23:32 ? 519次 阅读
Bug之逻辑运算符优先级分享!
先看上面的代码,最后串口打印出来Key_Sta[0] = 0xff;为什么呢?????蛤??? 打眼看去好像没什么问题,为什么????...
发表于 10-28 20:31 ? 349次 阅读
最好看的最新高清中文字幕,我不卡影院午夜伦不卡,亚洲国产在线精品一区在,yw193.尤物影院 和田市| 渝北区| 南江县| 永修县| 博罗县| 永嘉县| 德清县| 罗源县| 黄陵县| 当雄县| 仙桃市| 海兴县| 岗巴县| 千阳县| 波密县| 荃湾区| 嘉祥县| 张家界市| 共和县| 涿州市| 台州市| 会昌县| 柳河县| 沈阳市| 额济纳旗| 萝北县| 定结县| 原平市| 鲁甸县| 盐城市| 永福县| 沁源县| 清镇市| 建始县| 邓州市| 清丰县| 新津县| 德格县| 黑龙江省| 定西市| 锡林浩特市| http://444 http://444 http://444 http://444 http://444 http://444