美文网首页Python
互斥锁和Gil锁的关系

互斥锁和Gil锁的关系

作者: 楠木cral | 来源:发表于2023-02-20 09:50 被阅读0次

Gil锁 : 保证同一时刻只有一个线程能使用到cpu

互斥锁 : 多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱

简单来说,GIL可以看做一个作用在cpu使用上的特殊互斥锁

首先假设只有一个进程,这个进程中有两个线程 Thread1,Thread2, 要修改共享的数据date, 并且有互斥锁

执行以下步骤

(1)多线程运行,假设Thread1获得GIL可以使用cpu,这时Thread1获得 互斥锁lock,Thread1可以改date数据(但并
没有开始修改数据)

(2)Thread1线程在修改date数据前发生了 i/o操作 或者 ticks计数满100 (注意就是没有运行到修改data数据),这个
时候 Thread1 让出了Gil,Gil锁可以被竞争

(3) Thread1 和 Thread2 开始竞争 Gil (注意:如果Thread1是因为 i/o 阻塞 让出的Gil Thread2必定拿到Gil,如果
Thread1是因为ticks计数满100让出Gil 这个时候 Thread1 和 Thread2 公平竞争)

(4)假设 Thread2正好获得了GIL, 运行代码去修改共享数据date,由于Thread1有互斥锁lock,所以Thread2无法更改共享数据
date,这时Thread2让出Gil锁 , GIL锁再次发生竞争

(5)假设Thread1又抢到GIL,由于其有互斥锁Lock所以其可以继续修改共享数据data,当Thread1修改完数据释放互斥锁lock,
Thread2在获得GIL与lock后才可对data进行修改

————————————————
原文链接:https://blog.csdn.net/weixin_41594007/article/details/79485847

相关文章

  • Python GIL 机制

    Python GIL(Global Interpreter Lock) 解释器锁 GIL本质就是一把互斥锁,将并发...

  • GIL 全局解释器锁

    一. 什么是GIL全局解释器锁 GIL 本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL锁,同一进...

  • python入门开发学习笔记之掌握Cpython的GIL解释器锁

    本节重点 掌握Cpython的GIL解释器锁的工作机制 掌握GIL与互斥锁 掌握Cpython下多线程与多进程各自...

  • 并发编程-线程

    线程 GIL 守护线程 线程锁(互斥锁 and 递归锁) 信号量 事件 条件 定时器 1.线程: 特点在多线程的操...

  • [python笔记] Gil全局解释锁和线程互斥锁的关系

    Gil全局解释锁延伸扩展 作用 : 保证同一时刻只有一个线程能使用到cpu 解释 : 当我们使用多线程的时候,在一...

  • 可重入读写锁 ReentrantReadWriteLock

    读写锁分为读锁和写锁,多个线程获取读锁不互斥,读写锁、写写锁互斥。 输出

  • go-锁机制

    Golang中的锁机制主要包含互斥锁和读写锁 互斥锁 互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只...

  • 锁分类

    是否锁住资源分为悲观锁(互斥同步锁)和乐观锁 悲观锁 典型的就是synchronize锁和Lock锁互斥同步锁, ...

  • 读写锁和互斥锁 读写互斥锁,简称读写锁 mux sync.RWMutex Lock和Unlock分别对写锁进行锁定...

  • Python之GIL

    什么是GIL GIL是Global Interpreter Lock的缩写,是一个互斥锁,它只允许一个线程控制Py...

网友评论

    本文标题:互斥锁和Gil锁的关系

    本文链接:https://www.haomeiwen.com/subject/pqzwkdtx.html