有人能懂?
1
jtsai 2018-10-02 17:46:56 +08:00
头像好评
|
2
tommy94 2018-10-02 17:53:21 +08:00 via Android
标题有错别字吗?
|
3
Fighting4Dream 2018-10-02 17:58:59 +08:00 via Android
有好处。乔布斯当年经常冥想。
|
4
delectate 2018-10-02 18:42:44 +08:00
大家不用担心,楼主只是进入了贤者时间。
|
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-02 19:42:52 +08:00 via Android
随着身体一阵抖动,一切都变得索然无味?
|
9
iiduce 2018-10-02 19:50:31 +08:00
声色虽云属少年,稍知撙节乃无愆。
关精息气宜闻早,莫使羽苞火中燃。 |
11
coderluan 2018-10-02 20:11:59 +08:00
那书挺好的,看不进去编译原理和 linkers and loaders 的都可以看看。
PS:楼主不想别人回复的莫名其妙,就别把标题和正文写的莫名其妙。 |
12
shpdnx 2018-10-03 05:52:43 +08:00 via Android
在做义工吗?
医院有义工。福利院有义工。寺庙有义工。 |
13
ryd994 2018-10-03 07:07:58 +08:00 via Android
@zhangZMZ 第一个 if 筛掉已经在忙的情况,避免没必要的抢锁,第二个 if 保证安全。
另外你这个代码有问题,万一抢到了锁,但 plnst 不空,那 unlock 也跳过了,就会死锁。 |
15
zhangZMZ OP @ryd994 第一个 if 筛掉已经在忙的情况,避免没必要的抢锁,第二个 if 保证安全。
第二个 if 保证安全? |
16
ryd994 2018-10-03 15:43:05 +08:00 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 既然都加锁了为何还会引起资源竞争?
|