多线程死锁练习题
时间: 2023-06-28 10:09:56 浏览: 85
Java多线程-线程安全问题练习题
以下是一个简单的多线程死锁练习题:
```python
import threading
# 创建两个锁
lock1 = threading.Lock()
lock2 = threading.Lock()
# 定义两个线程
def thread1():
# 获取锁1
lock1.acquire()
print("Thread 1 acquired lock 1")
# 等待1秒
time.sleep(1)
# 获取锁2
lock2.acquire()
print("Thread 1 acquired lock 2")
# 释放锁2
lock2.release()
# 释放锁1
lock1.release()
def thread2():
# 获取锁2
lock2.acquire()
print("Thread 2 acquired lock 2")
# 等待1秒
time.sleep(1)
# 获取锁1
lock1.acquire()
print("Thread 2 acquired lock 1")
# 释放锁1
lock1.release()
# 释放锁2
lock2.release()
# 创建两个线程并启动
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start()
t2.start()
```
在上面的代码中,我们创建了两个锁lock1和lock2,并定义了两个线程thread1和thread2。在thread1中,我们首先获取锁1,然后等待1秒,接着获取锁2,最后释放锁2和锁1。在thread2中,我们首先获取锁2,然后等待1秒,接着获取锁1,最后释放锁1和锁2。
由于线程1和线程2获取锁的顺序不同,当这两个线程同时运行时,就可能会出现死锁的情况。具体来说,如果线程1获取了锁1,而线程2获取了锁2,那么它们都在等待对方释放锁,就会出现死锁。
为了避免死锁,我们可以尝试改变线程1和线程2获取锁的顺序,或者使用try...finally语句来保证锁一定会被释放。
阅读全文