python多进程读写共享内存,使用管道进行同步通信后是否还需要使用锁机制

image


我的一个个人实践发现,如果多进程同时读写共享内存,即使使用管道方式进行通信以实现同步也不能实现真正的功能内存数据一致性。

根据下面资料:

https://blog.csdn.net/cswhl/article/details/111291090

可以知道,多进程读写共享内存时可能出现不同进程在不能核心上的L3缓存不一致,也就是说虽然共享内存的数据是只存储了一份,但是两个进程中每个进程在自己的运行的CPU内核的对应L3缓存上其实还有一份独立的对应缓存,这种情况下多进程中的每个进程进行读写的时候其实都是先进行自身空间下的缓存中的数据进行修改,于是就出现了多进行读写共享内存,即使使用管道进行同步通信也有可能出现缓存不一致的问题。




其实这个问题中暗含了这样一个问题:

为什么为什么加锁后多进程共享内存可以缓存一致

image



根据 https://blog.csdn.net/lijuncheng963375877/article/details/149532186 可以知道:

image




也就是说我们采用“python多进程读写共享内存,使用管道进行同步通信”也无法保证共享内存的读写不存在错误,其中主要原因是cache对应的各进程对应的CPU核心中缓存不同步的问题。而这个问题的解决方案也很简单,那就是加锁,多进程读写加锁后的共享内存中的数据会自动对缓存进行强制写回内存的操作,以来保证数据一致性。


也就是说,“python多进程读写共享内存,使用管道进行同步通信”并不能完全保证数据读写的一致性,只有对共享内存部分进行加锁才可以保证这块数据读写的一致性,避免多核心CPU运行多进程程序时时由于cache中数据为读写共享内存导致运算报错,只有加锁才可以保证共享数据的内存和其对应的缓存可以保证一致性。




相关:

https://www.cnblogs.com/yxysuanfa/p/19102328

https://developer.aliyun.com/article/1062049

https://blog.csdn.net/qq_42982923/article/details/105507769

https://blog.csdn.net/weixin_50064049/article/details/134617400

https://blog.csdn.net/liulilittle/article/details/149675540




posted on 2025-12-21 12:09  Angry_Panda  阅读(38)  评论(0)    收藏  举报

导航