I have an application which constantly (+-100ms) reads orders from a PLC and then puts them in a model which then gets read by multiple clients. For this im using the lock statement.
Order Reading thread :
lock (model) {
//update object
}
Clients Reading :
lock (model) {
//serialize object to json string
}
send over tcp stream to client.
But i could also use for the update :
Interlocked.ExChange(oldObj, newObj)
I don't want my clients to have to wait for a lock that is happening in the Order Reading thread. And i definitly dont want client to block my Order Reading thread.
Am i better off using the Interlocked ?
Thanks for the advice!
Yes, you are better off using Interlocked as it's more efficient since it's mostly translated into a single atomic operation.
However, if you don't mind the clients still reading the old object for a bit you can even do without the Interlocked and just set a new instance.
The client that happen to get the new instance will get the updated data and those that don't will get it in one of the next checks.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With