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()メソッドで排他ロックを解放しています。

排他制御を使用することで、同一時間にあるスレッドのみが共有リソースにアクセスでき、複数のスレッド間での競合状態を回避し、共有リソースの整合性を確保します。

bannerAds