多线程打印输出问题
有可能。编译器很有可能生成这样的代码,不断重复:1: $1 = 2: $1 = $1 + 13: = $14: print $1AB两个thread,i存在addr位置。A1: $1 = // A.$1 = 0A2: $1 = $1 + 1 // A.$1 = 1A3: = $1 // = 1A4: print $1 // output 1A1: $1 = // A.$1 = 1B1: $1 = // B.$1 = 1A2: $1 = $1 + 1 // A.$1 = 2A3: = $1 // = 2A4: print $1 // output 2A1: $1 = // A.$1 = 2A2: $1 = $1 + 1 // A.$1 = 3A3: = $1 // = 3B2: $1 = $1 + 1 // B.$1 = 2B3: = $1 // = 2 // 这步把i从3写回2是关键。B4: print $1 // output 2A4: print $1 // output 3A1: $1 = // A.$1 = 2B1: $1 = // B.$1 = 2A2: $1 = $1 + 1 // A.$1 = 3A3: = $1 // = 3A4: print $1 // output 3B2: $1 = $1 + 1 // B.$1 = 3B3: = $1 // = 3B4: print $1 // output 3A1: $1 = // A.$1 = 3A2: $1 = $1 + 1 // A.$1 = 4A3: = $1 // = 4A4: print $1 // output 4...
■网友
Data race is undefined behavior,
■网友
补充一下,++i和print i两者生成的代码量和运行时间不在一个级别上,出现race condition很难,最终的结果很可能是数字顺序输出。 如果是这样的代码tmp = iprint tmpi = tmp + 1就更有可能出现题目中说的输出。
■网友
你是想强调3,3,3出现的这个情况吗?直觉告诉你两条线程只会一个数字只出现两次,但是多线程太奇妙了,如果你测出了这个情况请务必告知我。
■网友
显然不能这样 最好的办法就是push到一个线程 顺序打印
推荐阅读
- |沛县深入开展教育领域突出问题专项整改
- 电信预付费用户为啥不能打印当月报销账单
- 阿贵看车|质量频出问题、可靠性倒数第二,市值创新高,特斯拉有何魔力?
- 佳博RFID标签打印机能在哪些行业大展身手
- 地政|超全(可打印)资深教师熬夜吐血整理:史地政文综三科知识思维导图
- 打印机打印的时候,放置小于打印设置的纸张会有啥影响
- 怎样看待物联网、3D打印、大数据之间的关系
- 车祸|女子刚买的新车出问题送去维修,凌晨却接到交警电话:车出车祸了
- AI+BIM+3D打印,到底对建筑行业会有多大影响
- |治污攻坚进入“百米冲刺”,不同地区分类施策——“定向挖潜”,精准解决突出问题
