Python 线程同步与互斥

本文探讨了Python中的线程并发概念,详细解释了线程同步和互斥,以及如何通过锁机制保证数据一致性。同时,通过实例展示了死锁现象以及防止死锁的策略,并对比了进程与线程的区别。
摘要由CSDN通过智能技术生成

什么是并发?

在操作系统中,指一个时间段内有几个程序都处于已启动到运行结束之间的状态,并且这几个程序都是在同一个处理机上运行的,但任一个时间点却只有一个程序在处理机上执行。
注意并发与并行并不是同一个概念。并发是指一个时间段内同时运行,表示的是一个区间,而并行是指在同一个时间点上都在运行,是一个点,并且并发在同一时间点上只能有一个程序在运行。
在实际应用中,多个线程往往会共享一些数据(如:内存堆栈、串口、文件等),并且线程间的状态和行为都是互相影响的。并发线程的两种关系:同步与互斥。

线程同步与互斥

互斥:线程之间通过对资源的竞争,所产生的相互制约的关系,就是互斥关系。这类线程间主要的问题就是互斥和死锁的问题。

同步:线程之间不是相互排斥的关系,而是相互依赖的关系。换句话说,就是多线程共享同一临界资源时,前一个线程输出作为后一个线程的输入,当第一个线程没有输出时,第二个线程必须等待。因为当多个线程共享数据时,可能会导致数据处理出错,因此线程同步主要的目的就是使并发执行的各线程之间能够有效的共享资源和相互合作,从而使程序的执行具有可再现性。
共享数据指的是并发执行的多个线程间所操作的同一数据资源。
出现共享资源访问冲突的实质就是线程间没有互斥的使用共享资源,也就是说并发执行过程中,某一个线程正在对共享资源访问时,比如写,此时其它的线程就不能访问这个共享数据,直到正在访问它的线程访问结束。避免互斥,我们通过对共享资源进行加锁操作来避免访问冲突。当有线程拿到访问这个共享数据的权限时,就对其加一把锁,这样别的线程由于得不到访问的锁,所以不能访问,直到线程释放了这把锁,其它线程才能访问。
线程将的同步与互斥,是为了保证所共享的数据的一致性。

关于线程互斥的实例:

import threading
import time

data = 0
lock = threading.Lock()#创建一个锁对象

def func() :
  global data
  print "%s acqui
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值