Proposals: Synchronization
Kent Boogaart
kentcb at internode.on.net
Mon Jul 24 05:08:57 PDT 2006
Are there no further opinions on this? Am I too late in bringing up stuff
like this or am I perhaps asking in the wrong place?
Thanks,
Kent
"Kent Boogaart" <kentcb at internode.on.net> wrote in message
news:e9urtc$ef5$1 at digitaldaemon.com...
> Hi all,
>
> I have some ideas regarding D's synchronization support that I'd like to
> put forward. Any input would be much appreciated.
>
> 1. Change the "synchronization" keyword to "lock".
>
> Pros:
> - easier and quicker to type
> - no confusion over spelling (it is spelt "synchronisation" in
> Australia, UK et al)
>
> Cons:
> - none that I can think of
>
> As a Java programmer, it used to annoy me typing "synchronization" every
> time I needed a locking construct. As a C# programmer, I rejoiced in the
> terser "lock" keyword.
>
> 2. Don't permit arbitrary locking of objects.
>
> It is well accepted amongst the Java and .NET communities that allowing
> locking of arbitrary objects is a bad thing. For example, this is
> considered bad practice:
>
> public void myMethod()
> {
> ...
> lock (this)
> {
> ...
> }
> }
>
> It is bad because any other code could lock the object refered to by this.
> That can result in deadlocks, race conditions and all sorts of weird
> behavior. The accepted practice is:
>
> private object _lock = new object();
>
> public void myMethod()
> {
> ...
> lock (_lock)
> {
> ...
> }
> }
>
> That way only the owning class can lock on the object.
>
> So my suggestion is to disallow locking on arbitrary objects and change
> the lock keyword to only allow locking on a Phobos-provided Lock class
> like this:
>
> private Lock _lock = new Lock(); //the Lock class or struct is implemented
> in Phobos
>
> public void myMethod()
> {
> lock (_lock) //OK
> {
> }
>
> lock (this) {} //compile error
>
> lock (new object()) {} //compile error
> }
>
> I would also suggest NOT allowing this syntax:
>
> public lock(_lock) void myMethod()
> {
> }
>
> Because it is ugly and synchronization is an implementation detail that
> should be kept out of the method signature.
>
> Pros:
> - the synch block can be removed from every object stored on the gc heap
> (that's a saving of at least 4 bytes per gc object - that's huge for
> applications that allocate a lot of small objects)
> - programmers are forced to lock in a safer manner. The problems of Java
> / .NET locking on arbitrary objects are avoided.
> - D will be able to provide better diagnostics of locks as a program
> runs and during debug sessions. Locks could be named, for example
>
> Cons:
> - none that I can think of
>
> Love to hear what others think,
> Kent Boogaart
>
More information about the Digitalmars-d
mailing list