Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is threading dangerous?

I've always been told to puts locks around variables that multiple threads will access, I've always assumed that this was because you want to make sure that the value you are working with doesn't change before you write it back i.e.

mutex.lock()
int a = sharedVar
a = someComplexOperation(a)
sharedVar = a
mutex.unlock()

And that makes sense that you would lock that. But in other cases I don't understand why I can't get away with not using Mutexes.

Thread A:

sharedVar = someFunction()

Thread B:

localVar = sharedVar

What could possibly go wrong in this instance? Especially if I don't care that Thread B reads any particular value that Thread A assigns.

like image 883
Whyrusleeping Avatar asked Jun 04 '26 19:06

Whyrusleeping


1 Answers

It depends a lot on the type of sharedVar, the language you're using, any framework, and the platform. In many cases, it's possible that assigning a single value to sharedVar may take more than one instruction, in which case you may read a "half-set" copy of the value.

Even when that's not the case, and the assignment is atomic, you may not see the latest value without a memory barrier in place.

like image 96
Reed Copsey Avatar answered Jun 06 '26 11:06

Reed Copsey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!