二十二、 深入Python的进程和线程(上篇)( 二 )
线程间变量的共享在多线程中 , 所有变量对于所有线程都是共享的 , 因此 , 线程之间共享数据的最大危险在于多个线程同时修改一个变量 , 那就乱套了 , 所以我们需要互斥锁 , 来锁住数据 。
文章插图
代码如上图所示 , 上面代码中打印的a是1还是2?
答案是:2 。 因为出现了global关键字 , 线程间变量的共享 , 在func函数中的a是全局变量 。 因此在函数中a的值发生了变化 。
【二十二、 深入Python的进程和线程(上篇)】下面 , 我们提高一点点难度 , 代码如下图所示 , 还是猜一猜a是啥东西 。 注意:这里出现了join来阻塞 , 并且增加了加和减的操作 。
文章插图
相信很多人都认为是0 , 其实这个a的值是变化的 , 可能这次是0, 下次是1 , 还有可能是1000000 , 比如 , 我可以
a就是在[-1000000 , 1000000]中的一个随机数 。
为什么呢?这是因为虽然他们是同时运行的 , 但是同时在修改我们的a , 那就乱了 。 a在for i in range(1000000) , 就是遍历了1000000 , incr和decr的方法都加上一起了 , 在这1000000次遍历中 , 不知道有多少加 , 多少减 , 比如 , 我1000000都是加 , 没有减 , a就是1000000 , 但是这种情况的概率很低 。
如果你就是想出现0 , 其实只需要加一个互斥锁就可以了 。 这样你加多少次 , 我就减多少次 , 加减的次数不会叠加 。 因此来了lock的用法 , 具体代码如下图所示 。
文章插图
这个a怎么运行都是 0 。 因为我们把这个a锁上了 , 这样就加1000000次 , 减1000000次 , 怎么出来都是我们的0 。
今天也学到了很多东西呢 , 明天有什么新知识呢?真期待鸭~如果喜欢文章可以关注我哦~
?
本文已收录 GitHub , 传送门~[1], 里面更有大厂面试完整考点 , 欢迎 Star 。
?
Reference[1]
传送门~:
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 占营收|华为值多少钱
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 操盘|中兴统一操盘中兴、努比亚、红魔三大品牌
- 印度|拒绝华为后,印度、英国斥资数十亿求助日本
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 一图看懂!数字日照、新型智慧城市这样建(上篇)|政策解读 | 新型