互斥锁与多线程间共享全局变量

互斥锁

一、 代码展示

① 没加锁(X)

import threading

num = 0

def write1():

    global num
    i = 1
    while i

运行结果

result1:1180321
result2:1567595

以上 result2 结果不是一个定值,各种值情况都会出现

② 加了锁(√)

import threading

num = 0

def write1(lock):

    global num
    i = 1
    while i

运行结果

result1:1996142
result2:2000000  # 因为每个线程都会1000000次+1,所以哪个线程最后一次+1输出结果肯定是2000000

二、 总结

  • ① 线程之间是共用全局变量的,因为线程是一个进程里分出来的几个任务,使用的是用同一份代码,同样的 变量与资源
  • ② 互斥锁一般用在线程需要 共享全局变量 的时候
  • 进程与线程之间的关系与区别:
  • ① 进程 包含 多个线程
  • ② 进程间 不共用 变量与资源;线程间 共用 变量与资源
  • ④ num += 1 分三步执行:
    1. cpu从内存中读取num的值( 例如 num = 0
    2. cpu把读取到的num值加1( num + 1 = 1
    3. cpu把计算完的值重新赋值给内存( num = 1

Original: https://www.cnblogs.com/fry-hell/p/12825897.html
Author: 油炸地狱
Title: 互斥锁与多线程间共享全局变量

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612677/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球