MST
星途 面试题库

面试题:Python中如何使用锁来实现线程安全?请举例说明

在Python中,为了确保多线程环境下数据的一致性,常常需要使用线程同步机制。请描述如何使用`threading.Lock`来实现线程安全,并编写一个简单的示例代码,例如多个线程对共享变量进行增减操作,确保结果正确。
38.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 使用threading.Lock实现线程安全的描述
    • threading.Lock是一种简单的锁机制。当一个线程获取到锁(通过lock.acquire()方法),其他线程就无法获取,直到该线程释放锁(通过lock.release()方法)。这样在获取锁和释放锁之间的代码块就成为了临界区,同一时间只有一个线程能执行临界区内的代码,从而确保了多线程环境下数据的一致性。
  2. 示例代码
import threading

# 共享变量
shared_variable = 0
# 创建锁对象
lock = threading.Lock()


def increment():
    global shared_variable
    for _ in range(100000):
        lock.acquire()
        try:
            shared_variable += 1
        finally:
            lock.release()


def decrement():
    global shared_variable
    for _ in range(100000):
        lock.acquire()
        try:
            shared_variable -= 1
        finally:
            lock.release()


# 创建线程
thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=decrement)

# 启动线程
thread1.start()
thread2.start()

# 等待线程结束
thread1.join()
thread2.join()

print(f"最终共享变量的值: {shared_variable}")

在上述代码中,incrementdecrement函数都对shared_variable进行操作,通过lock确保在同一时间只有一个线程能修改这个共享变量,从而保证了结果的正确性。即使两个线程同时尝试操作shared_variable,由于锁的存在,也不会出现数据竞争问题。最终打印出的shared_variable值应该为0。