Если у вас есть только один процесс / поток, обращающийся к очереди, вам не нужно использовать блокировки, так как у вас нет параллельного доступа к очереди.
Однако, если у вас есть несколько процессов / потоков, обращающихся к очереди, вставляющих и удаляющих элементы одновременно, вам необходимо защитить эти доступы, используя блокировки.
Например, представьте себе случай, когда вы проверяете, пуста ли очередь, но какой-то другой процесс / поток одновременно вставляет элемент в очередь. Если вы не пишете свой код с учетом таких ситуаций, то ваш код будет вести себя недетерминированно.
Чтение кода sys/queue.h
показывает, что нет защиты от одновременных обращений, поэтому вам придется обрабатывать их самостоятельно, если у вас есть параллельный код.