Thanks, do you not consider using double-linked list as queue? Also, in that post mentioned "Mutexes are relatively heavy" but then in his post he used lock & unlock for dequeue.
Although I think even for reading the queue whether it's empty or not, you still need to make it atomic or locking to avoid data-races.