On Wednesday, 14 May 2014 at 09:16:21 UTC, Yuriy wrote:
On Wednesday, 14 May 2014 at 08:37:41 UTC, bearophile wrote:
What's the syntax to define a class without its __monitor? Are you using an annotation like @no_monitor?
No syntax for that. The __monitor is not present by default anywhere. If you need it, you need to define one.

class A
{

}

class B
{
    void* __monitor;
}

{
    A a = new A(); // sizeof a instance is 8
    B b = new B(); // sizeof b instance is 16
    synchronized(a)
    {
// Internally allocates a monitor and place it to global monitor hash map. On synchronize, search the hash map for already created monitors.

Global hashmap is a bad idea IMO because it's possibly expensive and impure. Rather deprecate synchronizing on classes without an explicit monitor.

    }

    synchronized(b)
    {
// Internally allocates a monitor, and sets b.__monitor to it. Pretty much like it was done before, except that __monitor field may now have different offset.
    }
A UDA on the class is cleaner than adding magic members.
}

So the semantics remains the same, you just may want to define a __monitor field if you want better performance.

Reply via email to