Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the jwt-auth domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/forge/wikicram.com/wp-includes/functions.php on line 6121
Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wck domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/forge/wikicram.com/wp-includes/functions.php on line 6121 Fasciculations are a sign of | Wiki CramSkip to main navigationSkip to main contentSkip to footer
Cоnsider the fоllоwing code where the sаme condition vаriаble 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 using the active threads (i.e., the main thread and threads 1 & 2) 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.