Consider the following code where the same condition variabl…

Consider the following code where the same condition variable is used to make threads block in channel_send and channel_receive: 1. enum channel_status channel_send(channel_t* channel, void* data) 2. { 3. pthread_mutex_lock(&channel->mutex); 4. 5. while (buffer_current_size(channel->buffer) == buffer_capacity(channel->buffer)) { 6.   pthread_cond_wait(&channel->cond_var, &channel->mutex); 7. } 8. 9. buffer_add(channel->buffer, data);10. pthread_cond_signal(&channel->cond_var);11. pthread_mutex_unlock(&channel->mutex);12.13. return SUCCESS;14. } 15. enum channel_status channel_receive(channel_t* channel, void** data)16. {17. pthread_mutex_lock(&channel->mutex);18. 19. while (buffer_current_size(channel->buffer) == 0) {20.   pthread_cond_wait(&channel->cond_var, &channel->mutex);21. }22. 23. buffer_remove(channel->buffer, data);24. pthread_cond_signal(&channel->cond_var);25. pthread_mutex_unlock(&channel->mutex);26. 27. return SUCCESS;28. } Suppose Channel A has a capacity of 1 message and it is currently empty, with no waiting threads in send or receive and the following sequence occurs: Thread 1 and Thread 2 are both created to receive a message from Channel A.  These threads start running and block in line 20. The main thread sends a message on Channel A two times. Describe a specific thread ordering of the above two points that will lead to one thread getting stuck in line 6 and another getting stuck in line 20 forever.  You cannot introduce any new threads to the situation, and assume all other channel functions and the usage of these functions are correct. (HINT: Either Thread 1 or Thread 2 should be woken up from the first send’s pthread_cond_signal; let’s say it’s Thread 1.  Consider then how Thread 1’s pthread_cond_signal could either wake up the other receive thread or the main thread as it is attempting the second send).