
1 jtsai 2018 年 10 月 2 日 头像好评 |
2 tommy94 2018 年 10 月 2 日 via Android 标题有错别字吗? |
3 Fighting4Dream 2018 年 10 月 2 日 via Android 有好处。乔布斯当年经常冥想。 |
4 delectate 2018 年 10 月 2 日 大家不用担心,楼主只是进入了贤者时间。 |
5 zhangZMZ OP 没人看程序员的自我修养吗? 在 29 页: volatile T* pIntst =0; T* GetInstance() { if (pInst == NULL) { lock(); if( pInst == NULL) { pInst = new T; unlock(); } return pInst; } } |
6 zhangZMZ OP 上面为什么说 2 个 if 让 lock 的调用开销降低到了最小。 |
7 zek 2018 年 10 月 2 日 via Android 随着身体一阵抖动,一切都变得索然无味? |
9 iiduce 2018 年 10 月 2 日 声色虽云属少年,稍知撙节乃无愆。 关精息气宜闻早,莫使羽苞火中燃。 |
11 coderluan 2018 年 10 月 2 日 那书挺好的,看不进去编译原理和 linkers and loaders 的都可以看看。 PS:楼主不想别人回复的莫名其妙,就别把标题和正文写的莫名其妙。 |
12 shpdnx 2018 年 10 月 3 日 via Android 在做义工吗? 医院有义工。福利院有义工。寺庙有义工。 |
13 ryd994 2018 年 10 月 3 日 via Android @zhangZMZ 第一个 if 筛掉已经在忙的情况,避免没必要的抢锁,第二个 if 保证安全。 另外你这个代码有问题,万一抢到了锁,但 plnst 不空,那 unlock 也跳过了,就会死锁。 |
16 ryd994 2018 年 10 月 3 日 via Android @zhangZMZ 你这个看起来是个单例模式 那这个变量要么 null,要么初始化之后就不会再变 如果不考虑性能,安全的写法是 锁,检查,如果空就初始化 但是这样的话就每次都要锁,对这个变量的访问只能单线程 所以加一个优化,先看看是不是空,不空就直接用了,不需要再初始化也不需要加锁 第二个 if 还是不可以去掉,因为第一个 if 可能遇到 race condition |
17 zhangZMZ OP @ryd994 问题有 2 点: 1 没明白 race condition,因为如果是资源竞争那么第一个 if 和 lock 就足以解决问题了; 2 在程序员的自我修养的第 29 页写的是“ 2 个 if 能最大的降低 lock 的调用开销”,第一个 if 的作用我能理解,关键是第 2 个 if,它如何降低开销的? |
18 zhangZMZ OP 既然都加锁了为何还会引起资源竞争? |