GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。保护不同的数据的安全,就应该加不同的锁。
每执行一个python程序,就是开启一个进程,在一个python的进程内,不仅有其主线程或者由该主线程开启的其他线程,还有解释器开启的垃圾回收等解释器级别的线程,所有的线程都运行在这一个进程内,所以:
1、所有数据都是共享的,这其中,代码作为一种数据也是被所有线程共享的(test.py的所有代码以及cpython解释器的所有代码)
2、所有线程的任务,都需要将任务的代码当做参数传给解释器的代码去执行,即所有的线程要想运行自己的任务,首先需要解决的是能够访问到解释器的代码。
(摘自https://blog.csdn.net/qq_17513503/article/details/81062510)
PyGILState_Ensure一般用在面向C语言的回调函数调用python的函数对象之前,在调用它时,会向python解释器请求GIL资源,此时如果刚好有一个python函数已经获取了GIL,且需要等待回调函数执行完毕才能退出。如下图所示。
示例:
总结
以上是内存溢出为你收集整理的C & python联合编程-解决PyGILState_Ensure死锁问题全部内容,希望文章能够帮你解决C & python联合编程-解决PyGILState_Ensure死锁问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)