【问题标题】:Is it necessary to acquire lock for TAILQ_EMPTY() operation是否需要为 TAILQ_EMPTY() 操作获取锁
【发布时间】:2020-07-21 18:27:49
【问题描述】:

我喜欢在访问队列之前检查队列是否为空。在这种情况下,是否有必要为 TAILQ_EMPTY() 操作获取锁。通过TAILQ_EMPTY()的定义,好像是在读队列,所以估计不用锁了。我说的对吗?

#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)

【问题讨论】:

    标签: linux queue spinlock


    【解决方案1】:

    如果您只有一个进程/线程访问队列,则不需要使用锁,因为您没有对队列的任何并发访问。

    但是,如果您有多个进程/线程以并发方式访问队列插入和删除元素,那么您需要使用锁来保护这些访问。

    例如,假设您测试队列是否为空,但其他进程/线程同时在队列中插入一个元素。如果您在编写代码时没有考虑到这种情况,那么您的代码的行为将是不确定的。

    阅读sys/queue.h 的代码表明没有针对并发访问的保护,因此如果您有并发代码,则必须自己处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 2020-11-29
      • 2021-09-30
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2011-08-16
      相关资源
      最近更新 更多