[dmd-concurrency] CSP: Communicating sequential processes
Robert Jacques
sandford at jhu.edu
Wed Jan 20 07:48:57 PST 2010
On Wed, 20 Jan 2010 07:14:44 -0500, Michel Fortin
<michel.fortin at michelf.com> wrote:
> Le 2010-01-20 à 2:53, Robert Jacques a écrit :
>
>> Sort of; I was thinking about implicit use and not explicit use; i.e.
>> const functions would take a reader lock and non-const function would
>> take a writer lock. Generally, I've heard reports that CREW locks give
>> big performance boosts in certain domains (game programming, for
>> instance), but I don't know exactly the real performance trade-off
>> compare to normal locks under low contention. Still, it would be nice
>> to be able to replace an object's mutex with a rwmutex and have it work
>> right.
>
> I think read/write lock usage should only be used explicitly.
>
> That's because you can never upgrade "safely" from a read lock to a
> write lock, or to be precise there is always a risk that you must
> release your read lock before upgrading. Two threads could acquire a
> read lock and then both might want to upgrade to a write lock, which
> can't be satisfied without one of them dropping its read lock first.
>
> If the read lock drops because you call another function that wants a
> write lock, this could be trouble. Upgrades work well when there is only
> one thread requesting upgrades. Otherwise the upgrade must be seen as a
> drop-read-lock then acquire-write-lock non-atomic operation.
>
Ah, the composability problem. Thanks for explaining.
More information about the dmd-concurrency
mailing list