Pythonのマルチスレッドによる排他制御(ロック)の問題とその解決方法
Pythonではロック(Lock)を使用して排他アクセスを制御できます。ロックはスレッド同期メカニズムであり、同じリソースに同一時間に1つのスレッドだけがアクセスできるようにします。
排他アクセス問題を排他制御で解決するためのサンプルコードを以下に示します。
import threading
# 创建一个互斥锁对象
lock = threading.Lock()
# 共享资源
shared_data = 0
def worker():
global shared_data
# 获取互斥锁
lock.acquire()
try:
# 对共享资源进行操作
shared_data += 1
finally:
# 释放互斥锁
lock.release()
# 创建多个线程并启动
threads = []
for _ in range(10):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
# 等待所有线程执行完成
for t in threads:
t.join()
# 输出共享资源的结果
print(shared_data)
上記のコードでは、最初に排他ロックのオブジェクト(lock = threading.Lock())を作成しています。そして、各スレッド中で、まずlock.acquire()メソッドで排他ロックを取得し、共有リソースに触れた後、lock.release()メソッドで排他ロックを解放しています。
排他制御を使用することで、同一時間にあるスレッドのみが共有リソースにアクセスでき、複数のスレッド間での競合状態を回避し、共有リソースの整合性を確保します。