mirror of
https://github.com/isocpp/CppCoreGuidelines.git
synced 2024-03-22 13:30:58 +08:00
Expanded CP.50 to reference synchronized_value<T>
This commit is contained in:
parent
f15d001ba0
commit
1b51c917d0
|
@ -12712,11 +12712,13 @@ Flag all unnamed `lock_guard`s and `unique_lock`s.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### <a name="Rconc-mutex"></a>P.50: Define a `mutex` together with the data it guards
|
### <a name="Rconc-mutex"></a>P.50: Define a `mutex` together with the data it guards. Use `synchronized_value<T>` where possible
|
||||||
|
|
||||||
##### Reason
|
##### Reason
|
||||||
|
|
||||||
It should be obvious to a reader that the data is to be guarded and how.
|
It should be obvious to a reader that the data is to be guarded and how. This decreases the chance of the wrong mutex being locked, or the mutex not being locked.
|
||||||
|
|
||||||
|
Using a `synchronized_value<T>` (see the [WG21 proposal](http://wg21.link/p0290)) ensures that the data has a mutex, and the right mutex is locked when the data is accessed.
|
||||||
|
|
||||||
##### Example
|
##### Example
|
||||||
|
|
||||||
|
@ -12725,6 +12727,13 @@ It should be obvious to a reader that the data is to be guarded and how.
|
||||||
// ...
|
// ...
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
struct DataRecord {
|
||||||
|
// ...
|
||||||
|
};
|
||||||
|
synchronized_value<DataRecord> data; // Protect the data with a mutex
|
||||||
|
};
|
||||||
|
|
||||||
##### Enforcement
|
##### Enforcement
|
||||||
|
|
||||||
??? Possible?
|
??? Possible?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user