Python GIL锁 互斥锁

Python GIL锁 互斥锁

GIL锁是什么
GIL(Global Interperter Lock)称为全局解释器锁,并不是python语言独有的,而是python的常用解释器cpython上存在的(jython即java写成的python解释器没有)
互斥锁是什么
python代码层面的对多线程中共享资源的加锁
GIL锁和互斥锁的异同点
  • 相同:
    都是为了解决解释器中多个线程资源竞争的问题

  • 异:
    互斥锁是运用在一个py文件中的,也就是在一个应用程序中,是python代码层面的锁。解决我们自己写的Python程序中多线程共享资源的问题。
    GIL是Python解释器层面的锁,解决解释器中多个线程的竞争资源问题。

为什么有了GIL还要加互斥锁
https://blog.csdn.net/sinat_38682860/article/details/108056170?utm_source=app
因为只有GIL锁,仍然会出现线程数据的不安全性
# 线程资源不安全版(没加互斥锁)
from threading import Lock,Thread
n = 10000000
def func():
    global n
    for i in range(1000000):
        n -= 1
t_lst = []
for i in range(10):
    t = Thread(target=func)
    t.start()
    t_lst.append(t)
for i in t_lst:i.join()
print(n)

# 线程资源安全,加了互斥锁
from threading import Lock,Thread
n = 10000000
def func(lock):
    global n
    for i in range(1000000):
        lock.acquire()
        n = n - 1
        lock.release()
t_lst = []
lock = Lock()
for i in range(10):
    t = Thread(target=func,args=(lock,))
    t.start()
    t_lst.append(t)
# 调用一个 Thread 的 join() 方法,可以阻塞自身所在的线程。
for i in t_lst:i.join()
print(n)
参考文章
https://blog.csdn.net/weixin_43790276/article/details/91345641?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-6.control
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值