TAILQ_EMPTY()操作是否需要获取锁
Is it necessary to acquire lock for TAILQ_EMPTY() operation
我喜欢在访问队列之前检查队列是否为空。在那种情况下,是否有必要为 TAILQ_EMPTY() 操作获取锁。通过TAILQ_EMPTY()的定义,好像是在读队列,所以我猜是不会用锁的。我说得对吗?
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
如果只有一个 process/thread 访问队列,则不需要使用锁,因为您没有对队列的任何并发访问。
但是,如果您有多个 processes/threads 以并发方式访问队列插入和删除元素,那么您需要使用锁来保护这些访问。
例如,假设您测试队列是否为空但其他 process/thread 正在同时向队列中插入元素的情况。如果您不在编写代码时考虑到这些情况,那么您的代码将具有不确定性。
阅读 sys/queue.h
的代码表明没有防止并发访问的保护,所以如果你有并发代码,你必须自己处理它们。
我喜欢在访问队列之前检查队列是否为空。在那种情况下,是否有必要为 TAILQ_EMPTY() 操作获取锁。通过TAILQ_EMPTY()的定义,好像是在读队列,所以我猜是不会用锁的。我说得对吗?
#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
如果只有一个 process/thread 访问队列,则不需要使用锁,因为您没有对队列的任何并发访问。
但是,如果您有多个 processes/threads 以并发方式访问队列插入和删除元素,那么您需要使用锁来保护这些访问。
例如,假设您测试队列是否为空但其他 process/thread 正在同时向队列中插入元素的情况。如果您不在编写代码时考虑到这些情况,那么您的代码将具有不确定性。
阅读 sys/queue.h
的代码表明没有防止并发访问的保护,所以如果你有并发代码,你必须自己处理它们。