Starting from the code for the circular array. modify it so that: a) A producer blocks when the queue is full. It is woken up when a consumer extracts an element, freeing one position; b) A consumer blocks when the queue is empty. It is woken up when a producer inserts an element in the queue.