Skip to content

Latest commit

 

History

History
16 lines (13 loc) · 1.07 KB

File metadata and controls

16 lines (13 loc) · 1.07 KB

Race condition in orignal procs.py

Thanks to reader Michael Albert who noticed the code I published during the Early Release had a race condition in proc.py.

If you are curious, this diff shows the bug and how I fixed it—but note that I later refactored the example to delegate parts of main to the start_jobs and report functions.

The problem was that I ended the while loop that retrieved the results when the jobs queue was empty. However, it was possible that the queue was empty but there were still processes working. If that happened, one or more results would not be reported. I did not notice the problem when I tested my original code, but Albert showed that adding a sleep(1) call before the if jobs.empty() line made the bug occur frequently. I adopted one of his solutions: have the worker function send back a PrimeResult with n = 0 as a sentinel, to let the main loop know that the process had completed, ending the loop when all processes were done.