为什么有了GIL锁还要有互斥锁

1. 详细原因

尽管GIL(全局解释器锁)可以确保在CPython解释器中同一时刻只有一个线程执行Python字节码,但它并不能解决多线程并发访问共享资源的问题。

互斥锁的作用是保证在多线程环境下,同一时刻只有一个线程能够访问共享资源,从而避免数据竞争和不一致性的问题。

GIL和互斥锁的作用是不同的,GIL是为了保证解释器的线程安全,而互斥锁是为了保证共享资源的线程安全。在多线程环境下,即使有GIL的存在,如果不使用互斥锁来保护共享资源,仍然会出现数据竞争和不一致性的问题。因此,尽管有了GIL锁,仍然需要使用互斥锁来确保多线程环境下共享资源的正确访问。

1.GIL锁的释放不由人控制,比如在临界区中间释放了就会发生数错乱的问题

2.GIL锁锁不住临界区,需要我们自己加锁,就是在线程操作数据之前加一把锁操作完毕以后释放锁,另一个线程想要操作数据必须要获取互斥锁,才能操作数据。

什么时候会释放GIL锁呢?

1.线程遇到了io操作

2.时间片轮转,时间片到了就会自动切换

2.名词解释

数据竞争:

在并发程序中,多个线程同时访问共享的数据,并且至少有一个线程对该数据进行了写操作,而且这些访问没有进行同步控制,导致最终的结果与预期不一致的情况。

数据竞争可能会导致程序出现未定义的行为,例如产生不确定的结果、崩溃或死锁等问题

临界区:是指一段代码或一段程序片段,需要在同一时间只能被一个线程执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值