在多线程编程中,线程同步是非常重要的话题,它用于协调多个线程对共享资源的访问,避免出现竞争条件(Race Condition)、死锁(Deadlock)等问题,确保多个线程之间的数据一致性。
在 Python 中,常用的线程同步技术有锁(Lock)、条件变量(Condition)、信号量(Semaphore)、事件(Event)等。
锁是一种最基本的线程同步机制,它用于保护共享资源。在 Python 中,可以使用 threading.Lock 类来创建一个锁。锁有两个状态:锁定和未锁定。当一个线程获取了锁之后,其他线程就不能再获取锁,直到该线程释放锁为止。在 Python 中,可以使用 acquire() 和 release() 方法来获取和释放锁。
以下是一个示例,演示了如何使用锁来保护共享资源:
import threading
import time
class Counter:
"""计数器类"""
def __init__(self):
self._value = 0
self._lock = threading.Lock()
def increment(self):
"""增加计数器"""
with self._lock:
self._value += 1
def get_value(self):
"""获取计数器的值"""
return self._value
def worker(counter):
"""线程函数"""
print("Worker thread started")
for i in range(100000):
counter.increment()
print("Worker thread finished")
# 创建计数器对象
counter = Counter()
# 创建线程
t1 = threading.Thread(target=worker, args=(counter,))
t2 = threading.Thread(target=worker, args=(counter,))
# 启动线程
t1.start()
t2.start()
# 等待线程结束
t1.join()
t2.join()
# 输出计数器的值
print("Counter value:", counter.get_value())在上面的代码中,我们定义了一个计数器类 Counter,它包含一个值和一个锁。然后,我们创建了两个线程,并将计数器对象作为参数传递给它们的线程函数。线程函数使用 acquire() 和 release() 方法来获取和释放锁,并使用计数器增加计数器的值。最后,我们使用 get_value() 方法获取计数器的值,并输出它。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。