• 互斥锁 *******


    from multiprocessing import Process,Lock
    
    # 进程间 内存空间是相互独立的
    def task1(lock):
        lock.acquire()
        for i in range(10000):
            print("===")
        lock.release()
    
    def task2(lock):
        lock.acquire()
        for i in range(10000):
            print("===============")
        lock.release()
    
    def task3(lock):
        lock.acquire()
        for i in range(10000):
            print("======================================")
        lock.release()
    
    if __name__ == '__main__':
        # 买了一把锁
        mutex = Lock()
    
        # for i in range(10):
        #     p = Process(target=)
        p1 = Process(target=task1,args=(mutex,))
        p2 = Process(target=task2,args=(mutex,))
        p3 = Process(target=task3,args=(mutex,))
    
        # p1.start()
        # p1.join()
        # p2.start()
        # p2.join()
        # p3.start()
        # p3.join()
    
        p1.start()
        p2.start()
        p3.start()
    
        print("over!")

    结果:

      由于数量庞大就不全部写出来了大概就是  : 先 打印 "==="  再打印 "==============="   最后打印"======================================"

    # 什么时候用锁?
        # 当多个进程 同时读写同一份数据 数据很可能就被搞坏了
        # 第一个进程写了一个中文字符的一个字节 cpu被切到另一个进程
        # 另一个进程也写了一个中文字符的一个字节
        # 最后文件解码失败
        # 问题之所以出现 是因为并发 无法控住顺序
        # 目前可以使用join来将所有进程并发改为串行
    
        # 与join的区别?
        # 多个进程并发的访问了同一个资源  将导致资源竞争(同时读取不会产生问题 同时修改才会出问题)
        # 第一个方案 加上join  但是这样就导致了 不公平  相当于 上厕所得按照颜值来
        # 第二个方案 加锁  谁先抢到资源谁先处理[
        # 相同点: 都变成了串行
        # 不同点:
        # 1.join顺序固定 锁顺序不固定!
        # 2.join使整个进程的任务全部串行  而锁可以指定哪些代码要串行
    
        # 锁使是什么?
        # 锁本质上就是一个bool类型的标识符  大家(多个进程) 在执行任务之前先判断标识符
        # 互斥锁 两个进程相互排斥
    
        # 注意 要想锁住资源必须保证 大家拿到锁是同一把
    
        # 怎么使用?
        # 在需要加锁的地方 lock.acquire() 表示锁定
        # 在代码执行完后 一定要lock.release() 表示释放锁
        # lock.acquire()
        # 放需要竞争资源的代码 (同时写入数据)
        # lock.release()
  • 相关阅读:
    SMTP协议原始命令码和工作原理[转]
    VC++ SMTP协议电子邮件传送剖析
    C++编译模式(转)
    IE6下select标签覆盖div的完美解决办法
    星级评论插件
    CSS Reset CSS Framework
    if判断IE浏览器的类型
    通过Prototype属性添加Array删除重复数据方法
    Javascript性能优化
    我自己的Javascript 库,封装了一些常用函数
  • 原文地址:https://www.cnblogs.com/TF511/p/9932235.html
Copyright © 2020-2023  润新知