Python中级精华临界区加锁
概念梳理:
临界区:
临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段
,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用。
目的:
我们在多线程
处理是,经常会涉及到对于一块共享资源的访问,这里就需要线程可以互斥去避免出现竞态条件(racecondition)。
方法:
要想让可变对象安全地在多线程环境中进行访问,就要使用锁变量(threading中的LockRLock),锁变量也是同步原语
中的最常见一种之一。
示例:importthreadingclassShareCounter:一个可以在多线程中分享的类definit(self,initialvalue0):self。valueinitialvalueself。valuelockthreading。Lock()defaddone(self,delta1):withself。valuelock:with上下文管理器,是的锁的申请和释放更加方便(自动释放),更好地保证了互斥同样很好地避免了死锁self。valuedelta执行缩进语句时获得锁,缩进语句结束后自动释放锁defsubone(self):withself。valuelock:self。value1with管理器完全等同于如下操作(老版本的python中):self。valuelock。acquire()self。value1self。valuelock。release()
线程的调度从本质上来说是非确定性的(只能保证独一访问,但保证不了谁先谁后)。只要共享的可变状态需要被多个线程访问,就要使用锁机制,保证数据的安全。
在threading库中我们也发现了其他的同步原语例如:RLock(可重入锁)、Semaphore对象(信号量)。
RLock:可以被同一个线程多次获取,主要用来编写基于锁的代码,或者基于‘监听器’的同步处理。
当某个类持有这种类型锁时,只有一个线程可以使用类中全部函数或者方法,例如:importthreadingclassShareCounter:一个可以在多线程中分享的类lockthreading。RLock()definit(self,initialvalue0):self。valueinitialvaluedefaddone(self,delta1):withShareCounter。lock:self。valuedeltadefsubone(self,delta1):withShareCounter。lock:self。addone(delta)
这份代码中只有一个作用于整个类的锁,它被所有的类实例所共享,不再将所绑定在某个实例的可变状态上,现在这个锁是用来同步类中的方法的。对于其他标准锁不同的是,对于已经持有了该锁的方法可以调用同样使用了这个锁的其他方法(参考subone())。
这个实现的特点是,无论创建了多少counter实例,这些实例共有同一把锁。因此,当有大量counter出现时,这种方法堆内存的使用效率要高很多。但是可能存在的缺点是在使用了大量线程且需要频繁更新counter中的数据时,这么做会出现锁争用的情况。
另外一种同步原语semaphore,是一种基于共享计数器的同步原语。如果计数器非0,那么with语句会递减计数器并且允许线程继续执行。当with语句块结束后,会将计数器递增。如果计数器为0,那么执行过程会被阻塞,直到由另外一个线程来递增计数器为止。由于信号量
的实现更为复杂,这会对程序带来一定的负面影响。除了简单地加锁功能外,信号量对象对于那些设计在线程间发送信号或者需要实现节流处理的应用中更加有用,例如限制并发总数:fromthreadingimportSemaphoreimporturllib。requestfetchurlsemaSemaphore(5)deffetchurl(url):withfetchurlsema:returnurllib。request。urlopen(url)
神仙打架,各品牌巅峰之作随着时代的发展和技术的进步,智能手机早已成为我们日常生活中的必需品。在当今的智能手机市场中,主要的手机制造商也为了进入更多市场而进入了白热化阶段,并且他们开始采取机不可失的策略……
小班音乐活动大皮球活动目标:1、通过学习歌曲,让幼儿掌握歌曲的名字。2、引导幼儿在观察、感知拍皮球动态的基础上,感受轻重,并分别用较轻、较响的声音演唱。3、教幼儿根据词意进行歌表演,……
幼儿园大班不开心的小树教案活动目标:1、知道总是不开心的人会受冷落,乐观、开朗的人会受人欢迎。2、学习正确地表达自己的心情,尝试进行自我情绪调控。3、根据已有经验,大胆表达自己的想法。……
邹忌讽齐王纳谏阅读附答案分享阅读《邹忌讽齐王纳谏》。(15分)邹忌修八尺有余,而形貌昳丽。朝服衣冠,窥镜,谓其妻曰:我孰与城北徐公美?其妻曰:君美甚,徐公何能及君也?城北徐公,齐国之美丽者也。忌不自……
Unit5lookatthetiger知识点四会句子whatisitdoing?它正在干什么?it’seatingbananas。它正在吃香蕉。whatisshedoing?她正在干什……
密约的造句密约拼音【注音】:miyue密约解释【意思】:()秘密约定。()秘密缔结的条约。密约造句:1、最终,当我五岁的时候,通过由约翰。F。肯尼迪总统协商……
做什么事情最快乐第二课时的教学设计一、谈话导入:1、上一节课,小朋友们认真读了课文,读得很有味道,这课的课题是《做什么事最快乐》,读了课文以后,谁能用题目说一句话?也就是说:谁想弄明白做什么事最快乐。……
天高任鸟飞,海阔凭鱼跃激发学生无穷的想象爱因斯坦说过:想象比知识更重要,因为知识是有限的,而想象力是无限的。因此我们要特别注意培养学生的想象力、创新意识。我们只要能充分挖掘出这些取之不尽、用之不竭的宝藏,学生的想象力……
八年级思品教学反思结合每堂课内容创设情境或开展各种形式的活动,调动学生的学习兴趣。以下是PINCAI小编收集的八年级思品教学反思,仅供大家阅读参考!八年级思品教学反思孔子曰:吾日三省吾身。……
九年级思想品德上册让社会投给我赞成票教学反思教学设计以学科知识为支撑,注重培养学生的创新精神和思维能力、参与社会生活能力社会实践能力的目标要求,全面提高学生的思想品德素质。教学内容上正确理解和把握了教学内容,创造性地使用……
快乐的教学反思快乐体育起源于日本,它是指从情感教学入手,创设符合学生年龄特点的生动、活泼、和谐的教育氛围,激发学生的情感,唤起学生自主性,对学生进行健全的身体教育、人格教育为目标的一种体育教……
活动闻一闻,尝一尝教案活动目的:1、了解自己的感官,学习用鼻子、眼睛、嘴巴来辨别各种液体。2、愉快的参与活动,愿意用语言表达自己的发现和感觉。活动准备:无色透明的液体(水、糖……