Explain your answer for Version A. If you indicated that th…
Explain your answer for Version A. If you indicated that the code is correct, provide a brief explanation about why this is the case. If you indicated that the code is incorrect, provide a specific thread ordering that shows a race condition.
Read DetailsConsider the following code, where channels are used to sync…
Consider the following code, where channels are used to synchronize threads as they add a stream of values. Assume read_input() will always return a uint64_t value and also assume that channel_send and channel_receive are implemented correctly. 1. // global channel 2. channel_t* channel; 3. 4. // receives two values from channel then sends their sum on the same channel 5. void* work(void* arg) { 6. uint64_t x; 7. uint64_t y; 8. for (int i = 0; i < 9; i++) { 9. channel_receive(channel, &x);10. channel_receive(channel, &y);11. channel_send(channel, x + y);12. }13. return NULL; 14. }15. 16. int main() {17. channel = channel_create(3);18. 19. // create a thread to run the work function20. pthread_t thread;21. pthread_create(&thread, NULL, work, NULL);22. 23. for (int i = 0; i < 10; i++) {24. uint64_t value = read_input();25. channel_send(channel, value);26. }27. 28. pthread_join(thread, NULL);29. 30. uint64_t result;31. channel_receive(channel, &result);32. printf("Final sum: %lu\n", result);33. return 0;34. } Describe a specific thread ordering that will lead to a deadlock. In your example, make sure to include any conditions needed for the deadlock to show up (e.g., a specific number of messages in the channel).
Read DetailsExplain your answer for Version B. If you indicated that th…
Explain your answer for Version B. If you indicated that the code is correct, provide a brief explanation about why this is the case. If you indicated that the code is incorrect, provide a specific thread ordering that shows a race condition.
Read Details