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