| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Python的线程03 线程同步 -> 正文阅读 |
|
[Python知识库]Python的线程03 线程同步 |
前面两篇文章介绍了线程概念和多线程程序的代码演示,但在多线程程序中,它们互相独立打印的时间却是错乱的! 如下图,明明t-0 > t-1 > t-2 (按照线程创建时间早晚排列)。最后输出居然是t-1最落后。 我们怎么样做避免错乱呢, 下面看看。 线程同步多线程,就是多个独立的运行单位,同时执行同样的事情。 多线程不是已经做到同时执行了吗?还需要同步干嘛? 是的,线程是同时被调用执行了,但是每个线程之间互相独立,也互相竞争了。 这就跟跑道上有3个运动员,枪响之后同时开跑,但是他们通常却不是同时到达终点。 同步是什么意思? 同步就是原本这条跑道跑三个人的加上同步之后,在任意时间上,只有一个人在跑道。 听起来是不是匪夷所思,怎么多线程不是为多个任务提高效率吗?加个同步不就一个时间只有一个任务执行了,这还扯啥多线程。 很遗憾,同步就是这个意思,我们有时会说完整一点,同步互斥!总结来说就是:同步是一种机制,它保证跑道上面任何时候只有一个运动员。技术上来说就是,同步保证 程序数据 任何时候只被一个线程操作。 我们使用同步机制的时候,也是在找那些应该被限制的’跑道‘,利用同步机制保证在那个跑道上任意时刻只有一个‘运动员’在上面跑步。 (解释的很清楚了,看不懂的可以找同学讨论上面的这几句) 我们了解了同步机制,下面看看锁。 threading.Lock获取同步锁threading.Lock是一个类,我们能用它创建一个锁对象。
锁要是坏了,后果可以自己想象(后面文章会说)。 我们下面代码会用到Lock的两个函数: acquire函数:获取锁 前文说过了,加上主线程,一共是4个线程。 运行下面代码看看:
下面是运行结果: 我们看到每个线程都完整完成了任务,不会出现三个线程互相穿插错乱的输出。 这里初学者可以感受一下同步的作用,效果。 总结延伸以上就是一种线程协调方案。 线程同步,也并非同一步调,而是同步互斥! 上面学委也提到了同步和多线程是矛盾存在的,后面继续看吧。 这里提出一个小问题:
对了,有些同学看学委文章经常忘记关注,好多文章别错过了。 另外喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:42:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |