【4.3】进程间同步(互斥锁)
【一】什么是进程同步(互斥锁)
-
互斥锁(Mutex)是一种用于多线程编程中控制对共享资源访问的机制。
-
其作用是保证在同一时刻只有一个线程在访问共享资源,从而避免多个线程同时读写数据造成的问题。
-
互斥锁的基本原理是在对共享资源进行访问前加锁,使得其他线程无法访问该资源,当访问完成后再解锁,使得其他线程可以进行访问。
-
通过这种方式,可以保证同一时间只有一个线程在执行关键代码段,从而保证了数据的安全性。
-
需要注意的是,互斥锁会带来一些额外的开销,
-
【二】多个进程共享同一打印终端
- 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,
- 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理
【1】未加锁
- 并发运行,效率高,但竞争同一打印终端,带来了打印错乱
【2】加锁
- 由并发变成了串行,牺牲了运行效率,但避免了竞争
【三】多个进程共享同一文件
- 文件当数据库,模拟抢票
- 并发运行,效率高,但竞争写同一文件,数据写入错乱
【1】未加锁
【2】加锁
-
针对上述数据错乱问题,解决方式就是加锁处理
- 将并发变成串行牺牲效率,但是保证了数据的安全
-
购票行为由并发变成了串行,牺牲了运行效率,但保证了数据安全
【四】互斥锁的优缺点
【1】加锁的优点
- 加锁可以保证多个进程修改同一块数据时
- 同一时间只能有一个任务可以进行修改,即串行的修改
- 没错,速度是慢了,但牺牲了速度却保证了数据安全。
【2】加锁的缺点
- 虽然可以用文件共享数据实现进程间通信,但问题是:
- 1.效率低(共享数据基于文件,而文件是硬盘上的数据)
- 2.需要自己加锁处理
【3】优化方案
-
因此我们最好找寻一种解决方案能够兼顾:
- 1、效率高(多个进程共享一块内存的数据)
- 2、帮我们处理好锁问题。这就是mutiprocessing模块为我们提供的基于消息的IPC通信机制:队列和管道。
-
1 队列和管道都是将数据存放于内存中
-
2 队列又是基于(管道+锁)实现的,可以让我们从复杂的锁问题中解脱出来,
-
我们应该尽量避免使用共享数据,尽可能使用消息传递和队列,避免处理复杂的同步和锁问题,而且在进程数目增多时,往往可以获得更好的可获展性。
【五】行锁和表锁
行锁和表锁是数据库中常用的锁定机制。
【1】行锁
- 行锁是在对数据库表中的某个数据行进行修改时
- 一次只允许一个用户操作该行
- 其他用户如果需要修改该行数据就必须等待。
- 通过行锁定可以避免多个用户同时修改同一行数据所导致的数据不一致问题。
【2】表锁
- 表锁则是当一个用户操作某个数据库表时
- 会锁定整个表,其他用户同时不能操作该表。
- 这在一些特殊场景下比如表维护、备份等是非常有用的。
【3】小结
- 总的来说
- 行锁定是比较细粒度的锁定
- 而表锁定则是更为粗粒度的锁定方法。
【六】特别提醒
- 锁不要轻易使用,容易造成死锁现象
- 锁只在处理数据的部分加,用来保证数据的安全(只在争抢数据的环节加锁)
__EOF__

本文作者:Chimengmeng
本文链接:https://www.cnblogs.com/dream-ze/p/17982368.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/dream-ze/p/17982368.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17982368
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具