[dmd-concurrency] draft 7
Robert Jacques
sandford at jhu.edu
Mon Feb 1 12:43:42 PST 2010
On Mon, 01 Feb 2010 15:09:53 -0500, Andrei Alexandrescu
<andrei at erdani.com> wrote:
> Robert Jacques wrote:
>> Page 24, P1: "The notable absent is real, which is the only a platform
>> dependent type that the implementation has discretion regarding atomic
>> sharing."
>> which is the only a platform dependent type => which is a platform
>> dependent type
>> Page 28, P3: "good ole days of classic multithreading;"
>> ole => old
>
> Isn't "good ole" an Americanism?
You're right. It appears to be a regional contraction/variant/slang of
old, like ol' and has been in use since 1832. But it appear it's mostly
used when writing dialogue in a specific accent and not in formal prose.
*shrug* I think old gets the point across and won't confuse non-Americans
and non-English speakers.
>> Page 28 Comments:
[snip]
>> - Would a transfer function like this be possible?
>> synchronized class BankAccount {
>> private double _balance;
>> void transfer(BankAccount dst, double amount) {
>> enforce(_balance >= amount);
>> _balance -= amount;
>> dst._balance += amount;
>> }
>> }
>> or would you have to do it like the later example?
>
> Relaxation of field typechecking only happens for "this", not for other
> objects. If the above were allowed, it would only lock one object.
>
> Now, say you use atomic add for dst. In that case, you can implement
> transfer as above. It would be a mild violation of encapsulation because
> you deposit without calling deposit().
Even if you used an atomic add for dst you'd still get a race. Consider,
thread A tries to deposit to dst and so takes a lock and reads
dst._balance. Then thread B tries to transfer to dst and commits an atomic
add. When thread A writes the updated balance back to dst._balance, the
transfer is over-written and lost.
[snip]
>> Section 1.14.1 Comments:
>> If a reference to data protected by synchronization escapes, then races
>> can and will occur. This seems like a fundamental flaw in the design. I
>> think a cast should be required to enable an escape.
>
> Low-level races won't occur because at most you escape references to
> shared values. No?
See the transfer example above. This is a variant of the problem with STM
designs which which Walter posted a link to in January. In essence, a
value protected by a lock my always be protected by that lock.
http://www.bluebytesoftware.com/blog/Default.aspx#a4cfad7df-ed84-46a4-a961-54aafdaeb9d7
[snip]
More information about the dmd-concurrency
mailing list