多线程同步
多线程同步是确保多个线程在访问共享资源时能够协调执行,防止出现数据竞争和不一致性的一种机制。同步机制可以保证在任意时刻,只有一个线程能够访问特定的资源。
- 互斥锁(Mutex):确保一次只有一个线程可以访问代码的某个部分。
- 信号量(Semaphore):控制同时访问某个特定资源的线程数量。
- 条件变量(Condition Variable):允许线程在某些条件不满足时挂起,并在条件满足时被唤醒。
- 读写锁(Read-Write Lock):允许多个读线程同时访问资源,但写线程会独占访问。
- 原子操作(Atomic Operations):使用原子变量和操作来避免多线程环境下的数据竞争。
以下是使用 Python 的 threading
模块实现多线程同步的示例:
import threading
# 创建一个互斥锁
mutex = threading.Lock()
# 共享资源
shared_resource = 0
def thread_function(name):
global shared_resource
# 获取锁
mutex.acquire()
try:
# 临界区:修改共享资源
print(f"Thread {name} is modifying the shared resource.")
shared_resource += 1
finally:
# 释放锁
mutex.release()
# 创建线程
thread1 = threading.Thread(target=thread_function, args=(1,))
thread2 = threading.Thread(target=thread_function, args=(2,))
# 启动线程
thread1.start()
thread2.start()
# 等待所有线程完成
thread1.join()
thread2.join()
print(f"Final value of shared resource: {shared_resource}")
在这个示例中,我们使用互斥锁来同步对共享资源 shared_resource
的访问。每个线程在修改资源之前都会尝试获取锁,如果锁已经被其他线程占用,则会等待直到锁被释放。