this post was submitted on 03 Sep 2024
853 points (99.4% liked)
Programmer Humor
32558 readers
1000 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
I once had a racing condition that got tipped over by the debugger. So similar behavior to what's in the meme, but the code started working once I put in the
print
calls as well. I think I ended up just leaving the print calls, because I suck at async programmingYeah, I was going to mention race conditions as soon as I saw the parent comment. Though I'd guess most cases where the debugger "fixes" the issue while print statements don't are also race conditions, just the race isn't tight enough that that extra IO time changes the result.
Best way to be thorough with concurrency testing IMO involves using synchronization to deliberately check the results of each potential race going either way. Of course, this is an exponential problem if you really want to be thorough (like some races could be based on thread 1 getting one specific instruction in between two specific instructions in thread 2, or maybe a race involves more than 2 threads, which would make it exponentially grow the exponential problem).
But a trick for print statement debugging race conditions is to keep your message short. Even better if you can just send a dword to some fast logger asynchronously (though be careful to not introduce more race conditions with this!).
This is one of the reasons why concurrency is hard even for those who understand it well.