V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GordianZ
V2EX  ›  程序员

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

  •  
  •   GordianZ · 2017-10-18 21:21:24 +08:00 · 5092 次点击
    这是一个创建于 2591 天前的主题,其中的信息可能已经有所发展或是发生改变。
    if (A==null)
    {
        doA();
    }
    else if (A!=null)
    {
        if(B==0)
        {
            if(A==null)
            {
                doA();
            }
    ....
        }
    }
    

    我整个人都是懵逼的……

    18 条回复    2017-10-19 20:15:08 +08:00
    EyreFree
        1
    EyreFree  
       2017-10-18 21:25:10 +08:00   ❤️ 1
    多线程条件下,进入 if (A!=null) 分支后在内层的 if(A==null) 执行前 A 变为 null 的话这段代码大概是有意义的吧...

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

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

    不加锁依然赌命?

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

    逃...
    rbe
        15
    rbe  
       2017-10-19 09:42:06 +08:00
    @m939594960 这都能分析出来,很强
    domty
        16
    domty  
       2017-10-19 10:45:54 +08:00
    这种看起来无比诡异的代码主要就俩原因。
    1.写代码的人是个坑
    2.这段代码被删删改改了很多次而没有被认真重构过。
    seancheer
        17
    seancheer  
       2017-10-19 17:58:35 +08:00
    多线程这种判断也是不能够保证的。。同意楼上的观点,要么写代码的人坑,要么这段代码被改来改去,改的人没仔细看其他的逻辑。
    GordianZ
        18
    GordianZ  
    MOD
    OP
       2017-10-19 20:15:08 +08:00
    其实是当天写出来的,而且无关多线程,只是代码烂而已……
    明天应该不用来上班了 😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5442 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.