首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python线程-线程的同步(一)

Python线程-线程的同步(一)

原创
作者头像
玖叁叁
发布于 2023-04-20 09:00:48
发布于 2023-04-20 09:00:48
9180
举报
文章被收录于专栏:玖叁叁玖叁叁

在多线程编程中,线程同步是非常重要的话题,它用于协调多个线程对共享资源的访问,避免出现竞争条件(Race Condition)、死锁(Deadlock)等问题,确保多个线程之间的数据一致性。

在 Python 中,常用的线程同步技术有锁(Lock)、条件变量(Condition)、信号量(Semaphore)、事件(Event)等。

锁(Lock)

锁是一种最基本的线程同步机制,它用于保护共享资源。在 Python 中,可以使用 threading.Lock 类来创建一个锁。锁有两个状态:锁定和未锁定。当一个线程获取了锁之后,其他线程就不能再获取锁,直到该线程释放锁为止。在 Python 中,可以使用 acquire() 和 release() 方法来获取和释放锁。

以下是一个示例,演示了如何使用锁来保护共享资源:

代码语言:javascript
复制
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 删除。

目录
  • 锁(Lock)
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档