Skip to content

A lock is re-entrant if it can be acquired multiple times by the same thread. Java already provides one. This for educational purposes only.

License

Notifications You must be signed in to change notification settings

javaf/simple-reentrant-lock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A lock is re-entrant if it can be acquired multiple times by the same thread. Simple Reentrant Lock uses owner thread ID and hold count fields to keep track of the owning thread and the number of times it holds the lock. A common lock is used for ensuring field updates are atomic, and a condition object is used for synchronization.

Acquiring the lock involves holding the common lock, waiting until there is no other thread holding it, updating owner thread ID (to current) and incrementing hold count before releasing the common lock.

Releasing the write lock involves holding the common lock, decrementing hold count, and if not holding anymore, signalling the others before releasing the common lock.

Java already provides a ReentrantLock. This is for educational purposes only.

Course: Concurrent Data Structures, Monsoon 2020
Taught by: Prof. Govindarajulu Regeti

lock():
1. Acquire common lock.
2. Wait until there is no other holder.
3. Update owner, and increment hold count.
4. Release common lock.
unlock():
1. Acquire common lock.
2. Throw expection, if we dont hold it.
3. Decrement hold count.
4. If not holding anymore, signal others.
5. Release common lock.

See SimpleReentrantLock.java for code, Main.java for test, and repl.it for output.

references

About

A lock is re-entrant if it can be acquired multiple times by the same thread. Java already provides one. This for educational purposes only.

Topics

Resources

License

Stars

Watchers

Forks

Languages