怎么在python中获取和释放GIL
这篇文章给大家介绍怎么在python中获取和释放GIL,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
python的五大特点是什么
python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。
1、说明
线程对GIL的操作本质上就是通过修改locked状态变量来获取或释放GIL。
2、获取GIL实例
线程在其他线程已经获取GIL的时候,需要通过pthread_cond_wait()等待获取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 ); success = thelock->locked == 0; if ( !success && waitflag ) { while ( thelock->locked ) { status = pthread_cond_wait(&thelock->lock_released, &thelock->mut); } success = 1; } if (success) thelock->locked = 1; status = pthread_mutex_unlock( &thelock->mut ); if (error) success = 0; return success;}
3、释放GIL实例
特别注意最后一步, 通过pthread_cond_signal()通知其他等待(pthread_cond_wait())释放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 ); thelock->locked = 0; status = pthread_mutex_unlock( &thelock->mut ); status = pthread_cond_signal( &thelock->lock_released ); }
关于怎么在python中获取和释放GIL就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341