python如何避免死锁_Python嵌入线程避免死锁?

有没有方法嵌入Python,允许Python的回调到C++,允许Python代码产生线程,避免死锁?在

问题是:要调用Python,我需要持有GIL。通常,我在第一次创建解释器时获取主线程状态,然后在调用Python之前使用PyEval_RestoreThread()获取GIL并交换线程状态。

从Python调用时,我可能需要访问一些受保护的资源,这些资源由主机中单独的关键部分保护。这意味着Python将持有GIL(可能来自我最初调用的其他线程),然后尝试获取我的保护锁。

当调用Python时,我可能需要持有相同的锁,因为我可能会迭代一些对象集合,例如。

问题是,即使我在调用Python时持有GIL,Python也可能放弃它,将它交给另一个线程,然后将该线程调用放入我的主机,期望获得主机锁。同时,主机可以取主机锁和GIL锁,并调用Python。僵局接踵而至。在

这里的问题是,当我调用GIL时,Python将GIL让给另一个线程。这就是它应该做的,但是它使得排序锁定变得不可能——即使我首先使用GIL,然后使用我自己的锁,然后调用Python,Python会从另一个线程调用到我的系统中,期望获得我自己的锁(因为它通过释放GIL来取消GIL的顺序)。在

我不能让我的系统的其余部分使用GIL来处理系统中所有可能的锁——这甚至不能正常工作,因为Python可能仍然会将它释放给另一个线程。在

我也不能保证我的主机在进入Python时不会持有任何锁,因为我不能控制主机中的所有代码。在

那么,难道这就是不能做到的情况吗?在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值