今天看到了这样一段代码,跟大家分享一下

2017-10-18 21:21:24 +08:00
 GordianZ
if (A==null)
{
    doA();
}
else if (A!=null)
{
    if(B==0)
    {
        if(A==null)
        {
            doA();
        }
....
    }
}

我整个人都是懵逼的……

5113 次点击
所在节点    程序员
18 条回复
EyreFree
2017-10-18 21:25:10 +08:00
多线程条件下,进入 if (A!=null) 分支后在内层的 if(A==null) 执行前 A 变为 null 的话这段代码大概是有意义的吧...

当然我觉得这段代码的作者基本上不会有这样诡异的本意...

2333
asd567800
2017-10-18 21:28:02 +08:00
@EyreFree 对的,不过应该加锁啊
beginor
2017-10-18 21:29:24 +08:00
@EyreFree 这解释真高明!
SoulSleep
2017-10-18 22:07:42 +08:00
@EyreFree 你这个想法又涉及到线程安全问题.......显然能写出这种代码的人也应该想不到有这种情况(⊙o⊙)…
bengxy
2017-10-18 23:04:16 +08:00
估计是忘了注释吧 23333
NxiJSiOS
2017-10-19 00:03:05 +08:00
代码诡异,就往多线程想吗? 233
introom
2017-10-19 00:22:07 +08:00
都 doA 了,else if 再检查一下也是没问题的。不过总体很怪异就是了。
m939594960
2017-10-19 00:31:13 +08:00
估计以前 代码逻辑可能是类似这样的,后来业务变动,删掉了那行吧。。。。
```
if (A==null)
{
doA();
}
else if (A!=null)
{
if(B==0)
{
a= fuck() < ----------------------
if(A==null)
{
doA();
}
....
}
}
```
changwei
2017-10-19 05:44:18 +08:00
我突然发现所有诡异的代码逻辑都可以用多线程来解释了
sagaxu
2017-10-19 08:12:18 +08:00
多线程环境下这种代码往往也是错的
karia
2017-10-19 08:32:09 +08:00
agostop
2017-10-19 09:02:55 +08:00
估计 8 楼说的差不多
deadEgg
2017-10-19 09:29:25 +08:00
多线程这依然是竞态环境

不加锁依然赌命?

多线程不合理啊
EyreFree
2017-10-19 09:36:42 +08:00
我在讲段子啊,你萌为什么都当真...QWQ...

逃...
rbe
2017-10-19 09:42:06 +08:00
@m939594960 这都能分析出来,很强
domty
2017-10-19 10:45:54 +08:00
这种看起来无比诡异的代码主要就俩原因。
1.写代码的人是个坑
2.这段代码被删删改改了很多次而没有被认真重构过。
seancheer
2017-10-19 17:58:35 +08:00
多线程这种判断也是不能够保证的。。同意楼上的观点,要么写代码的人坑,要么这段代码被改来改去,改的人没仔细看其他的逻辑。
GordianZ
2017-10-19 20:15:08 +08:00
其实是当天写出来的,而且无关多线程,只是代码烂而已……
明天应该不用来上班了 😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX