111,128
社区成员
发帖
与我相关
我的任务
分享
//=======场景1======
//线程1
lst_counter[0]++;
//线程2
lst_counter[0]--;
/*上面代码必然出问题 上面无论是 ++ 还是 -- 都需要依赖 lst_counter[0] 本身的值
假设lst_counter[0] 现在是一个变量a
a++; -> a +=1 -> a = a + 1;需要取出本身的值来加1 -- 同理
假设现在a=0 按理来说 两个线程一执行 一个++ 一个-- a的值又变成了 0
可情况不一定 假设两个线程 同时执行到了++ 和 --
++ -- (两个线程一起执行++和--的情况)
取出a的值 0 取出a的值 0 (由于没有做锁 所以他们可以一起执行)
0 + 1 = 1 0 - 1 = -1
把1复制给a 把-1赋值给a*/
所以你认为现在 a 的值到底应该是多少?不是1就是 -1 反正不是 0
//======场景2======
//线程1
lst_timeout[0] = 5000
//线程2
//假设这里是一个访问网页的类.GetHtml("http://www.baidu.com",lst_timeout[0])
/*这种情况你锁不锁都无所谓了 因为和上面的不一样 上面的是需要依赖自身的值做操作
而这个不一样 而这里是一个写入一个读取 */
所以说 得看你具体情况