unlock
unlock(l::ReentrantLock)
Releases ownership of the lock by the current task. If the lock had been acquired before, it just decrements an internal counter and returns immediately.
Examples
-
Unlock a ReentrantLock:
julia> lock = ReentrantLock(); julia> lock(lock); julia> unlock(lock);
In this example, a
ReentrantLock
is acquired using thelock
function, and then released using theunlock
function. -
Unlock a ReentrantLock with multiple acquisitions:
julia> lock = ReentrantLock(); julia> lock(lock); julia> lock(lock); julia> unlock(lock); julia> unlock(lock);
This example demonstrates unlocking a
ReentrantLock
that has been acquired multiple times. Each call tounlock
decrements the internal counter until it reaches zero, at which point the lock is fully released. -
Handle unlocking without prior acquisition:
julia> lock = ReentrantLock(); julia> unlock(lock);
The
unlock
function gracefully handles the case where the lock has not been acquired before. It simply decrements the internal counter and returns immediately without throwing an error.
Common mistake example:
julia> lock = ReentrantLock();
julia> unlock(lock);
ERROR: Base.ThreadsLockStateException("Cannot unlock an unacquired lock")
In this example, the unlock
function is called on a ReentrantLock
without prior acquisition. This error is thrown because the lock has not been acquired before attempting to unlock it. Ensure that the lock is acquired before calling unlock
to avoid this mistake.
See Also
:@async, :@schedule, :@task, Condition, consume, interrupt, istaskdone, istaskstarted, lock, notify, ReentrantLock, schedule, Task, task_local_storage, unlock, wait, yield, yieldto,User Contributed Notes
Add a Note
The format of note supported is markdown, use triple backtick to start and end a code block.