mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Remove all uses of the name scoped_lock
* scoped_lock is now a std name with subtly different semantics compared to lock_guard. Namely it can be used to lock 0 or more mutexes. This is valuable, but can also be accidentally used to lock 0 mutexes when 1 was intended, creating a run-time error. Therefore, if and when we use scoped_lock, extra care needs to be taken in reviewing that code to ensure it doesn't accidentally lock 0 mutexes when 1 was intended. To aid in such careful reviewing, the use of the name scoped_lock should be limited to those cases where the number of mutexes is not exactly one.
This commit is contained in:
committed by
manojsdoshi
parent
f22fcb3b2a
commit
9470558ecc
@@ -29,8 +29,6 @@ template <class Mutex, class CondVar>
|
|||||||
class basic_semaphore
|
class basic_semaphore
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
using scoped_lock = std::unique_lock <Mutex>;
|
|
||||||
|
|
||||||
Mutex m_mutex;
|
Mutex m_mutex;
|
||||||
CondVar m_cond;
|
CondVar m_cond;
|
||||||
std::size_t m_count;
|
std::size_t m_count;
|
||||||
@@ -49,7 +47,7 @@ public:
|
|||||||
/** Increment the count and unblock one waiting thread. */
|
/** Increment the count and unblock one waiting thread. */
|
||||||
void notify ()
|
void notify ()
|
||||||
{
|
{
|
||||||
scoped_lock lock (m_mutex);
|
std::lock_guard lock{m_mutex};
|
||||||
++m_count;
|
++m_count;
|
||||||
m_cond.notify_one ();
|
m_cond.notify_one ();
|
||||||
}
|
}
|
||||||
@@ -57,7 +55,7 @@ public:
|
|||||||
/** Block until notify is called. */
|
/** Block until notify is called. */
|
||||||
void wait ()
|
void wait ()
|
||||||
{
|
{
|
||||||
scoped_lock lock (m_mutex);
|
std::unique_lock lock{m_mutex};
|
||||||
while (m_count == 0)
|
while (m_count == 0)
|
||||||
m_cond.wait (lock);
|
m_cond.wait (lock);
|
||||||
--m_count;
|
--m_count;
|
||||||
@@ -68,7 +66,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool try_wait ()
|
bool try_wait ()
|
||||||
{
|
{
|
||||||
scoped_lock lock (m_mutex);
|
std::lock_guard lock{m_mutex};
|
||||||
if (m_count == 0)
|
if (m_count == 0)
|
||||||
return false;
|
return false;
|
||||||
--m_count;
|
--m_count;
|
||||||
|
|||||||
Reference in New Issue
Block a user