On Wednesday, 17 October 2018 at 21:12:49 UTC, Stefan Koch wrote:
Hi,

reading the other shared thread "shared - i need to be useful"(https://forum.dlang.org/thread/mailman.4299.1539629222.29801.digitalmar...@puremagic.com)

let me to an important realisation concerning the reason shareding data across threads is so unintuitve and hard to get right. The reason is that sharing in the real world has nothing to do with using something and the same time. For example: If I share my flat with another person, that person, while occupying the same flat as me, cannot actually occupy the same space. It is physically impossible.

In other words sharing does not mean for multiple entities to own something it's rather about diving and managing the (temporary) ownership of fragments.

Therefore if ownership is unclear sharing is impossible.
The safest default for something shared with unclear ownership is to view it as untouchable/unreadble/unwritable until ownership is established.

My understanding is that the "shared" keyword can be useful especially with array types that are operated on by multiple threads. Some algorithms put together data following specific rules on how that data can be fragmented.

Imagine a simple algorithm that does logic on very long numbers, split into bytes. One multi-threaded implementation may use 4 threads. The first operating on bytes 0, 4, 8, etc. The second operating on bytes 1, 5, 9, etc.

In this case, a mutex or lock isn't actually needed, because the algorithm itself assures that threads don't collide.

It's an over-simplification, but I think this is basically what the prime-number finding algorithm by Jabari Zakiya is doing.

Reply via email to