On Sat., 20 Oct. 2018, 7:00 am Stanislav Blinov via Digitalmars-d, < [email protected]> wrote:
> On Saturday, 20 October 2018 at 02:09:56 UTC, Dominikus Dittes > Scherkl wrote: > > On Saturday, 20 October 2018 at 00:46:36 UTC, Nicholas Wilson > > wrote: > >> Mutable = value may change > >> const = I will not change the value > >> immutable = the value will not change > >> > >> unshared = I (well the current thread) owns the reference > >> shared = reference not owned, no unordered access, no > >> (unordered) writes > >> threadsafe = ??? > > unshared = the current thread owns the reference > > threadsafe = I guarantee no race conditions or deadlocks will > > occur > > shared = every thread may have references > > Exactly, "thredsafe" in nothing more than a contract between > programmers. > When you have "const" data, it is trivial for the compiler to > enforce that: it just doesn't allow you to mutate it. But the > compiler cannot reason about whether your logic is "threadsafe" > or not, there can be no static enforcement of "thread-safety". It > only holds as an implicit contract between programmers: the > authors of data and functions, and the users of that data and > functions, i.e. the API and the callers. > Only at the level of the trusted functions. It is *very* easy to write a correct Atomic implementation. Queues and stuff are well understood and have great reference implementations. If you don't write @trusted functions (most wouldn't!), then you can't mess up. >
