GIL在python的获取和释放
- 更新时间:2021-06-23 09:00:35
- 编辑:秦鸿光
给大家整理了相关的编程文章,网友瞿代荷根据主题投稿了本篇教程内容,涉及到Python相关内容,已被498网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。
参考资料
- 《给Python点颜色:青少年学编程》配套资源 配套资源 / 237.78 MB / 佘友军 推荐度:
- 深度学习入门:基于Python的理论与实现(含源码) PDF 电子书 / 13.6 MB / 斋藤康毅 推荐度:
- Python学习笔记(第二版) / 1.5 MB / 码小辫 推荐度:
- 少博士趣学Python PDF 电子书 / 266.7 MB / 周安琪 推荐度:
- Python机器学习及实践:从零开始通往Kaggle竞赛之路 PDF 电子书 / 48.3 MB / 范淼,李超 推荐度:
正文内容
这是一篇很好的python技术文章,实例讲的很实用,把网友测试过的内容发布到这里,希望大家能有所收获。
1、说明
线程对GIL的操作本质上就是通过修改locked状态变量来获取或释放GIL。
2、获取GIL实例
线程在其他线程已经获取GIL的时候,需要通过pthread_cond_wait()等待获取GIL的线程释放GIL。
/*获取GIL*/ int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) { int success; pthread_lock *thelock = (pthread_lock *)lock; int status, error = 0; status = pthread_mutex_lock( &thelock->mut ); /*先获取mutex, 获得操作locked变量的权限*/ success = thelock->locked == 0; if ( !success && waitflag ) { /*已有线程上锁,*/ while ( thelock->locked ) { /*通过pthread_cond_wait等待持有锁的线程释放锁*/ status = pthread_cond_wait(&thelock->lock_released, &thelock->mut); } success = 1; } if (success) thelock->locked = 1; /*当前线程上锁*/ status = pthread_mutex_unlock( &thelock->mut ); /*解锁mutex, 让其他线程有机会进入临界区等待上锁*/ if (error) success = 0; return success; }
3、释放GIL实例
特别注意最后一步, 通过pthread_cond_signal()通知其他等待(pthread_cond_wait())释放GIL的线程,让这些线程可以获取GIL。
/*释放GIL*/ void PyThread_release_lock(PyThread_type_lock lock) { pthread_lock *thelock = (pthread_lock *)lock; int status, error = 0; status = pthread_mutex_lock( &thelock->mut ); /*通过mutex获取操作locked变量的权限*/ thelock->locked = 0; /*实际的释放GIL的操作, 就是将locked置为0*/ status = pthread_mutex_unlock( &thelock->mut ); /*解锁mutex*/ status = pthread_cond_signal( &thelock->lock_released ); /*这步非常关键, 通知其他线程当前线程已经释放GIL*/ }
以上就是GIL在python获取和释放的方法,希望能对大家有所帮助。更多Python学习指路:
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
相关教程
-
Python-ElasticSearch搜索查询的讲解
今天小编就为大家分享一篇关于Python-ElasticSearch搜索查询的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2019-06-03
-
python集合是否可变总结
在本篇文章里小编给大家分享了关于python集合是否可变的相关知识点总结,有需要的朋友们学习下。
发布时间:2019-06-26