面试题答案
一键面试1. 锁机制原理
在Python的thread
模块(在Python 3中建议使用_thread
,thread
模块已被弃用)中,锁(Lock)是一种同步原语。当一个线程获取到锁时,其他线程必须等待该线程释放锁后才能获取锁并访问共享资源,从而避免多个线程同时访问共享资源导致的数据不一致问题。
2. 代码示例
import _thread
import time
# 共享资源
shared_resource = 0
# 创建锁对象
lock = _thread.allocate_lock()
def increment():
global shared_resource
for _ in range(100000):
# 获取锁
lock.acquire()
try:
shared_resource += 1
finally:
# 释放锁
lock.release()
def decrement():
global shared_resource
for _ in range(100000):
# 获取锁
lock.acquire()
try:
shared_resource -= 1
finally:
# 释放锁
lock.release()
try:
# 启动第一个线程
_thread.start_new_thread(increment, ())
# 启动第二个线程
_thread.start_new_thread(decrement, ())
except:
print("Error: unable to start thread")
# 等待一段时间,确保线程执行完毕
time.sleep(2)
print("Final value of shared resource:", shared_resource)
在上述代码中:
lock = _thread.allocate_lock()
创建了一个锁对象。- 在
increment
和decrement
函数中,通过lock.acquire()
获取锁,确保只有一个线程可以进入临界区(对共享资源进行操作的代码段)。 - 使用
try - finally
语句块,在try
块中对共享资源进行操作,在finally
块中使用lock.release()
释放锁,以保证无论操作是否出现异常,锁都会被释放。 - 最后启动两个线程分别执行
increment
和decrement
函数,并等待一段时间确保线程执行完毕后输出共享资源的最终值。