On 31.05.2012 19:11, Steven Schveighoffer wrote:
On Thu, 31 May 2012 10:49:52 -0400, Dmitry Olshansky
<[email protected]> wrote:
OK let me land you a hand here. My proposal, that I think fits your
ideas quite favorably.

[snip]

Does it makes sense?

Everything but the ordering. I like the idea of ordering the locks based
on an intrinsic value, but opCmp isn't it. Objects can mutate, and opCmp
may produce different results. Imagine:

synchronized(a, b) // at this point a < b
{
a.makeGreaterThan(b);
assert(a > b);
}


No way! I live in world where victim's hand is cut off as a punishment for mutating a lock after creation ;)

You *never* want the ordering to change.

But I think we can probably work that out. What about comparing handles
of the mutexes? So you sort based on some property __mutex_id() which
must return a unique size_t that can be used to always define an
ordering of locking mutexes? Most mutexes are allocated by the OS, and
so their handles won't be affected by a moving GC, so you likely will
use the handle value.


This could work. In fact I imagined comparing handles ...
As with math at large you may either project (biject) your domain to a well-known one (like numbers, mutex_id in your case) and work with it or define all relevant properties for whatever your values in this domain are (providing custom ordering for user defined types).



--
Dmitry Olshansky

Reply via email to