digitalmars.D - a different kind of synchronized
- Fawzi Mohamed (21/21) Nov 25 2010 I have been thinking about this since some time.
I have been thinking about this since some time. When writing collections or similar I sometime want the object to be accessible from multiple threads, and sometime form only one. Obviously I want the version that uses a single thread to be efficient. To easily write both these version it would be really useful to be able to easily activate/deactivate with a flag some synchronization. To do this the synchronized statement is bad because it synchronizes the following code, and thus cannot be switched off without switching off the code inside it. A better solution would be synchronized(bla...); which would mean synchronized starting here, i.e. monitor(bla).lock(); scope(exit){ monitor(bla).unlock(); } (only that getting the monitor is a bit more complicated). As in D ";" is not a valid statement one would not have issues with the usual synchronized statement. The advantage is that with this you can easily do something like static if (shouldLock) synchronized(this); and thus easily write lock protected versions of an object. Fawzi
Nov 25 2010