private ReadWriteLock lock = new ReadWriteLock(); // this instance is shared by all threads public void ReadSomething() { try { lock.lockRead(); // serialized, but very quick PerformWork(); // potentially slower, but is concurrent } finally { lock.unlockRead(); // serialized, but very quick } }
public abstract aspect ReadWriteLockSynchronizationAspect perthis(readOperations() || writeOperations()) { public abstract pointcut readOperations(); public abstract pointcut writeOperations(); private ReadWriteLock _lock = new SomeReadWriteLock(); before() : readOperations() { _lock.readLock().acquire(); } after() : readOperations() { _lock.readLock().release(); } before() : writeOperations() { _lock.writeLock().acquire(); } after() : writeOperations() { _lock.writeLock().release(); } }
ReadWriteLock lock = new ReadWriteLock(); // on write: lock.writeLock().lock(); try { // write/update operation, // e. g. clear map and write new values } finally { lock.writeLock().unlock(); } // on read: lock.readLock().lock(); try { // read operation } finally { lock.readLock().unlock(); }