SpinLock: Add releasePrematurely for early releases
This commit is contained in:
+14
-2
@@ -80,14 +80,25 @@ public:
|
||||
{
|
||||
public:
|
||||
explicit Guard(SpinLock& lock)
|
||||
: lock_(lock)
|
||||
: lock_(lock), unlocked_(false)
|
||||
{
|
||||
lock_.acquire();
|
||||
}
|
||||
|
||||
~Guard()
|
||||
{
|
||||
lock_.release();
|
||||
if (!unlocked_) {
|
||||
lock_.release();
|
||||
}
|
||||
}
|
||||
|
||||
void unlockPrematurely()
|
||||
{
|
||||
if (!unlocked_)
|
||||
{
|
||||
lock_.release();
|
||||
unlocked_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Non-copyable, non-movable
|
||||
@@ -98,6 +109,7 @@ public:
|
||||
|
||||
private:
|
||||
SpinLock& lock_;
|
||||
bool unlocked_;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user