Необходимо ли получить блокировку для операции TAILQ_EMPTY () - PullRequest
0 голосов
/ 09 апреля 2020

Мне нравится проверять, пуста очередь или нет, прежде чем получить доступ к очереди. В этом случае, необходимо ли получить блокировку для операции TAILQ_EMPTY (). Благодаря определению TAILQ_EMPTY (), кажется, что он читает очередь, поэтому я думаю, что не использовать блокировку. Я прав?

# определить TAILQ_EMPTY (голова) ((голова) -> tqh_first == NULL)

1 Ответ

1 голос
/ 09 апреля 2020

Если у вас есть только один процесс / поток, обращающийся к очереди, вам не нужно использовать блокировки, так как у вас нет параллельного доступа к очереди.

Однако, если у вас есть несколько процессов / потоков, обращающихся к очереди, вставляющих и удаляющих элементы одновременно, вам необходимо защитить эти доступы, используя блокировки.

Например, представьте себе случай, когда вы проверяете, пуста ли очередь, но какой-то другой процесс / поток одновременно вставляет элемент в очередь. Если вы не пишете свой код с учетом таких ситуаций, то ваш код будет вести себя недетерминированно.

Чтение кода sys/queue.h показывает, что нет защиты от одновременных обращений, поэтому вам придется обрабатывать их самостоятельно, если у вас есть параллельный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...