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.