Background thread, async and GUI (dlangui)
Bagomot
bagomot at gmail.com
Thu Jul 21 17:47:40 UTC 2022
On Thursday, 21 July 2022 at 17:26:07 UTC, frame wrote:
> The module creators want you to prevent from non-threadsafe
> actions. Merging into one variable can be such a non-threadsafe
> action, but it has not to be.
>
> For example, if you have an array of fixed length or an already
> allocated one and each worker thread uses a fixed index to
> write into this result array variable then this operation may
> be threadsafe because each thread writes in different positions
> in the memory and the variable itself doesn't change.
>
> If you are depending to overwrite an value instead, the
> operation is not considered threadsafe. For example just adding
> 1 + 2. Adding a value to an associative array is also not
> thread safe (it may re-allocate or re-index it's data)
>
> We have basic tools to achieve this task. One is to lock
> actions with a synchronized block so each thread need to wait
> the other thread to complete before it can continue to execute
> the particular code position - and the other one are atomic
> operations that provide a better performance for simple
> operations because they are lock-free.
>
> Why it's needed to know this? Because you may run into
> situations where have to deal with it, even the compiler keeps
> silent about.
>
> https://dlang.org/spec/statement.html#synchronized-statement
I'm considering thread safety.
> Looking for your task you might want to use a
> `WorkerLocalStorage` solution instead, look at the example:
> https://dlang.org/phobos/std_parallelism.html#.TaskPool.WorkerLocalStorage
This looks interesting, thanks, I'll give it a try.
More information about the Digitalmars-d-learn
mailing list