If there is only one thread to add to queue and only one thread to retrieve from the queue, it is not necessary to lock the queue for those access actions, I think.
Usually the retrieve will be in a loop. If it missed one item, it will get it in next try. only concern is getting a partially data. if it is value type queue and the value is bigger than one basic memory unit, it may happen. but if it is a reference type, it should be ok.
am i right?