zhangZMZ
V2EX  ›  问与答

我在提神自我修养

  •  
  •   zhangZMZ · Oct 2, 2018 · 3056 views
    This topic created in 2964 days ago, the information mentioned may be changed or developed.

    有人能懂?

    18 replies  •  2018-10-03 18:49:47 +08:00
    jtsai
    jtsai
    Oct 2, 2018
    1
    头像好评
    tommy94
    tommy94
    Oct 2, 2018 via Android
    2
    标题有错别字吗?
    Fighting4Dream
    Fighting4Dream
    Oct 2, 2018 via Android
    3
    有好处。乔布斯当年经常冥想。
    delectate
    delectate
    Oct 2, 2018
    4
    大家不用担心,楼主只是进入了贤者时间。
    zhangZMZ
    zhangZMZ
    OP
    Oct 2, 2018
    5
    没人看程序员的自我修养吗?
    在 29 页:
    volatile T* pIntst =0;

    T* GetInstance()
    {
    if (pInst == NULL)
    {
    lock();
    if( pInst == NULL)
    {
    pInst = new T;
    unlock();
    }
    return pInst;
    }
    }
    zhangZMZ
    zhangZMZ
    OP
    Oct 2, 2018
    6
    上面为什么说 2 个 if 让 lock 的调用开销降低到了最小。
    zek
    zek
    Oct 2, 2018 via Android
    7
    随着身体一阵抖动,一切都变得索然无味?
    zhangZMZ
    zhangZMZ
    OP
    Oct 2, 2018
    8
    @zek g u n
    iiduce
    iiduce
    Oct 2, 2018
    9
    声色虽云属少年,稍知撙节乃无愆。
    关精息气宜闻早,莫使羽苞火中燃。
    zhangZMZ
    zhangZMZ
    OP
    Oct 2, 2018
    10
    @iiduce 真 tmd 的人才
    coderluan
    coderluan
    Oct 2, 2018
    11
    那书挺好的,看不进去编译原理和 linkers and loaders 的都可以看看。

    PS:楼主不想别人回复的莫名其妙,就别把标题和正文写的莫名其妙。
    shpdnx
    shpdnx
    Oct 3, 2018 via Android
    12
    在做义工吗?
    医院有义工。福利院有义工。寺庙有义工。
    ryd994
    ryd994
    Oct 3, 2018 via Android
    13
    @zhangZMZ 第一个 if 筛掉已经在忙的情况,避免没必要的抢锁,第二个 if 保证安全。
    另外你这个代码有问题,万一抢到了锁,但 plnst 不空,那 unlock 也跳过了,就会死锁。
    zhangZMZ
    zhangZMZ
    OP
    Oct 3, 2018
    14
    @ryd994 可否进一步探讨?
    zhangZMZ
    zhangZMZ
    OP
    Oct 3, 2018
    15
    @ryd994 第一个 if 筛掉已经在忙的情况,避免没必要的抢锁,第二个 if 保证安全。
    第二个 if 保证安全?
    ryd994
    ryd994
    Oct 3, 2018 via Android
    16
    @zhangZMZ 你这个看起来是个单例模式
    那这个变量要么 null,要么初始化之后就不会再变
    如果不考虑性能,安全的写法是
    锁,检查,如果空就初始化
    但是这样的话就每次都要锁,对这个变量的访问只能单线程
    所以加一个优化,先看看是不是空,不空就直接用了,不需要再初始化也不需要加锁
    第二个 if 还是不可以去掉,因为第一个 if 可能遇到 race condition
    zhangZMZ
    zhangZMZ
    OP
    Oct 3, 2018
    17
    @ryd994 问题有 2 点:
    1 没明白 race condition,因为如果是资源竞争那么第一个 if 和 lock 就足以解决问题了;
    2 在程序员的自我修养的第 29 页写的是“ 2 个 if 能最大的降低 lock 的调用开销”,第一个 if 的作用我能理解,关键是第 2 个 if,它如何降低开销的?
    zhangZMZ
    zhangZMZ
    OP
    Oct 3, 2018
    18
    既然都加锁了为何还会引起资源竞争?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2023 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 11:56 · PVG 19:56 · LAX 03:56 · JFK 06:56
    ♥ Do have faith in what you're doing.