• 关于锁


    理论上QUEUE不可能死锁,因为你读写的时候自动加Q锁,在占有Q锁的期间不可能再申请其它锁
    从这方面来讲,QUEUE对使用者来说是原子的

    如果真的存在死锁,那必然是其它锁交叉占用死的,与Q锁无关

    要看为何阻塞,先看看阻塞在哪里

    建议

    另外建议对QUEUE的get和put最好是非阻塞,或者设置一个超时,
    超时后可以打印异常信息,应该避免永久阻塞

    考虑一种可能的情况

    生产者A,消费者B

    A生产前先占用锁X,然后PUT(但是队列满了所以阻塞)
    B消费前申请锁X,然后GET——但是X申请不到了!被A永久占用

    应该避免这种情况,方法是:
    1、队列操作不要长时间阻塞,(用非阻塞或设置短超时)
    2、避免队列操作时占用其它锁

  • 相关阅读:
    C语言面试题——寻找错误
    C语言的声明解释的在线工具——cdecl
    C语言面试题——指针运算
    const 指针与指向const的指针
    C语言复杂声明解释
    poj1248
    poj1750
    poj1484
    poj1853
    poj1575
  • 原文地址:https://www.cnblogs.com/alapha/p/7662083.html
Copyright © 2020-2023  润新知