python 线程死锁_python-模拟线程上的死锁

How can I simulate a deadlock?

所有的死锁意味着一个或多个线程被阻止进行任何进度,因此您可以使用单个线程对其进行仿真.放一会儿True:睡一觉(10).

在实际情况下,通常会有两个线程同时阻止彼此进行进度.例如,也许他们以相反的顺序使用了一对锁,所以线程1直到获得锁2才释放锁1,但是线程2直到获得锁1才释放锁2.最好通过使两个线程永久阻塞来模拟它.

如果要实际创建死锁,最简单的方法是使线程在字面上相互阻塞:将thread2.join()添加到f1,将thread1.join()添加到f2.然后f1直到f2才完成,f2直到f1才完成,所以没有人可以完成.

但是,如果要创建现实的死锁,则几乎可以肯定要使用threading.Lock等同步对象来执行上述的两锁方案.

Also, how can I have each thread run after the other?

好吧,最简单的方法就是首先不要使用线程.但是,如果您确实想要,请执行以下操作:

thread1.start()

thread1.join()

thread2.start()

thread2.join()

thread3.start()

thread3.join()

Also can I list all the threads that are currently running in my script?

请参见threading.enumerate().通常,除调试目的外,您都不希望使用此功能.如果要以后再访问它们(在执行操作时),请在创建线程时跟踪它们.

or give them priorities ?

正如文档所说:

currently, there are no priorities, no thread groups, and threads cannot be destroyed, stopped, suspended, resumed, or interrupted.

如果您需要这样做,则必须走出线程的范畴,例如通过ctypes,win32api等使用本机API.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值