Looking at example 16 in the book there is the prvPrintTask() function which is used to send strings to the gatekeeper task. This task uses xQueueSendToBack() with a block time of 0. The comments say that this block time is used because there should always be space in the queue. But I am not sure that this is safe (especially to use it in an example), because both prvPrintTask() instances have priorities higher than the gatekeeper task and use random blocking delays. Additionally there is an ISR also writing to the queue. Maybe it is unlikely that all delays happen to be very short 5 consecutive times (5 is the size of the queue), but on the other hand the gatekeeper uses printf which takes a lot of time so IMHO the queue may become full because the low priority gatekeeper may not get the chance to always empty the queue in time and if it was another type of application - queuing important items to the queue may fail. Or do I misunderstand something?