python共享内存的读写同步与加锁 —— multiprocessing.Value和multiprocessing.Array、加锁

multiprocessing.Value多进程读写操作:

点击查看代码
import time
from multiprocessing import Process, Value

def func(val):
    for i in range(100):
        time.sleep(0.01)
        val.value += 1

if __name__ == '__main__':
    val = Value('i', 0)
    p_list = [Process(target=func, args=(val,)) for _ in range(100)]

    for p in p_list:
        p.start()
    for p in p_list:
        p.join()

    print(val.value)

运行结果:

image


可以看到,如果该共享内存的数据读写正常的话该值为10000,实际运行后的结果出现不同的表现,并且并不等于10000。





加锁后的共享内存操作:

val.get_lock()



点击查看代码
import time
from multiprocessing import Process, Value

def func(val):
    for i in range(100):
        time.sleep(0.01)
        with val.get_lock():
            val.value += 1

if __name__ == '__main__':
    val = Value('i', 0)
    p_list = [Process(target=func, args=(val,)) for _ in range(100)]

    for p in p_list:
        p.start()
    for p in p_list:
        p.join()

    print(val.value)





运行结果:

image





posted on 2025-11-16 17:35  Angry_Panda  阅读(0)  评论(0)    收藏  举报

导航