Python多线程如何使用互斥锁

 时间:2026-02-22 16:49:31

1、打开Ubuntu虚拟机,登录系统后,在桌面空白处右键 -- 打开终端。

Python多线程如何使用互斥锁

2、在终端使用vi编辑器创建一个文件tetr.py,在文件写内容如下:

from threading import Thread

import time

num = 0

def test1():

    global num

    for i in range(1000000):

        num += 1

    print("---test1---num=%d"%num)

def test2():

    global num

    for i in range(1000000):

        num += 1

    print("---test2---num=%d"%num)

p1 = Thread(target=test1)

p1.start()

time.sleep(4)

p2 = Thread(target=test2)

p2.start()

print("---num=%d---"%num)

代码中创建了一个全局变量num,在两个线程中分别对num累加了100000次1,在第一个线程创建创建,延迟了4秒创建第二个线程。

Python多线程如何使用互斥锁

3、在终端运行代码:

python3 tetr.py

结果如下下图所示,第一个线程执行完累加后全局变量变为100000,第二个线程执行完累加后全局变量变为200000和预期一致。

Python多线程如何使用互斥锁

4、修改第二步代码,去掉第一个线程之后的sleep,代码如下:

from threading import Thread

import time

num = 0

def test1():

    global num

    for i in range(1000000):

        num += 1

    print("---test1---num=%d"%num)

def test2():

    global num

    for i in range(1000000):

        num += 1

    print("---test2---num=%d"%num)

p1 = Thread(target=test1)

p1.start()

p2 = Thread(target=test2)

p2.start()

print("---num=%d---"%num)

Python多线程如何使用互斥锁

5、在终端运行代码,如下图所示

python3 tetr.py

发现并没有全局变量累加后并没有达到预期的200000,这是因为多线程导致的混乱。

Python多线程如何使用互斥锁

6、为解决多线程使用全局变量的问题,引入互斥锁,修改代码如下:

from threading import Thread,Lock

import time

num = 0

def test1():

    global num

    mutex.acquire()

    for i in range(1000000):

        num += 1

    mutex.release()

    print("---test1---num=%d"%num)

def test2():

    global num

    mutex.acquire()

    for i in range(1000000):

        num += 1

    mutex.release()

    print("---test2---num=%d"%num)

mutex = Lock()

p1 = Thread(target=test1)

p1.start()

p2 = Thread(target=test2)

p2.start()

print("---num=%d---"%num)

简单来说互斥锁,就是先要引入Lock,然后在主线程实例化锁对象,最后在子线程操作全局变量时候上锁,操作完成后解锁。

Python多线程如何使用互斥锁

7、在终端运行代码,可以成功看到预期的结果了,互斥锁使用效果很好。

Python多线程如何使用互斥锁

  • Python多进程间同步互斥方法lock
  • Python多线程简单实例
  • Python多线程threading模块中Thread类如何使用
  • python是什么,如何使用python
  • Python 线程互斥锁 死锁 递归锁 信号量
  • 热门搜索
    心机婊什么意思 世界屋脊指的是什么 五岳归来不看山黄山归来不看岳的意思 梅花香自苦寒来的意思 责无旁贷的贷什么意思 悲喜交集的意思 迢迢牵牛星古诗意思 虔诚是什么意思 凛冽什么意思 楚楚动人的意思