Python 面试题
目录

Python 中如何使用 threading.Lock 进行线程同步?

· 约 2 分钟读完 · 第 82 / 171 章

推荐答案

本题详细解读

1. 什么是 threading.Lock?

threading.Lock 是 Python 中用于线程同步的一个基本工具。它提供了一个简单的互斥锁机制,确保在同一时刻只有一个线程可以执行临界区代码。

2. 如何使用 threading.Lock?

  • 创建锁对象:首先需要创建一个 threading.Lock 对象。
  • 获取锁:在进入临界区之前,调用 lock.acquire() 方法获取锁。如果锁已经被其他线程持有,当前线程将会阻塞,直到锁被释放。
  • 释放锁:在临界区代码执行完毕后,调用 lock.release() 方法释放锁,以便其他线程可以获取锁并执行临界区代码。

3. 为什么使用 try-finally 块?

在获取锁后,使用 try-finally 块可以确保即使临界区代码抛出异常,锁也会被正确释放,避免死锁的发生。

4. 示例代码解析

  • 创建锁对象:lock = threading.Lock() 创建了一个锁对象。
  • 线程函数:thread_function 是一个线程函数,其中包含临界区代码。在进入临界区之前,线程会尝试获取锁,执行完临界区代码后释放锁。
  • 创建并启动线程:通过循环创建了 5 个线程,并启动它们。
  • 等待线程完成:使用 join() 方法等待所有线程执行完毕。

5. 注意事项

  • 死锁:如果锁没有被正确释放,可能会导致死锁。因此,确保在 finally 块中释放锁是非常重要的。
  • 性能:锁的使用会引入一定的性能开销,因此在设计多线程程序时,应尽量减少锁的争用。