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

猜你喜欢

转载自blog.csdn.net/m0_50685012/article/details/112801963