https://paul.pub/cpp-concurrency/
๐ C++ ้ๅฎถๆๅ ณ็ณปๅพ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ไบๆฅ้ (Mutex) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
โ โ โ โ โ
std::mutex std::recursive_mutex std::timed_mutex std::recursive_timed_mutex
(ๆฎ้้) (ๅฏ้ๅ
ฅ) (ๅธฆ่ถ
ๆถ) (ๅฏ้ๅ
ฅ + ๅธฆ่ถ
ๆถ)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅ
ฑไบซไบๆฅ้ (Shared Mutex) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ
std::shared_mutex std::shared_timed_mutex
(C++17, ๆฏๆ่ฏป/ๅ) (C++14, ๆฏๆ่ฏป/ๅ + ่ถ
ๆถ)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ RAII ้ๅฐ่ฃ
(Lock Wrappers) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ โ โ โ
std::lock_guard std::unique_lock std::scoped_lock std::shared_lock
(ๆ็ฎๅ RAII) (็ตๆดปๆงๅถ้) (C++17, ๅค้้ฒๆญป้) (C++14, ไธ็จไบ shared_mutex)
C++ ๆ ๅๅบ้็ไธป่ฆ้็ฑปๅ
C++ ไป C++11 ๅผๅงๅผๅ ฅๅค็งไบๆฅ้๏ผ้๏ผๅ RAII ๅฐ่ฃ ๏ผ
๐น ๅบ็กไบๆฅ้๏ผmutexes๏ผ
-
std::mutex- ๆๆฎ้็ไบๆฅ้๏ผไธๅฏ้ๅฝใ
-
std::recursive_mutex- ๅ ่ฎธๅไธ็บฟ็จๅคๆฌกๅ ้๏ผๅฟ ้กป็ธๅๆฌกๆฐ่งฃ้๏ผใ
-
std::timed_mutex- ๅจ
mutexๅบ็กไธๅขๅ ไบtry_lock_forๅtry_lock_untilใ
- ๅจ
-
std::recursive_timed_mutex- ้ๅฝ + ่ถ ๆถๅ่ฝใ
๐น ่ฏปๅ้๏ผๅ ฑไบซไบๆฅ้๏ผC++14/17๏ผ
-
std::shared_mutex๏ผC++17๏ผ- ๅ ่ฎธๅคไธช็บฟ็จ่ฏป๏ผshared lock๏ผ๏ผไฝๅ๏ผunique lock๏ผๆถๆไปใ
-
std::shared_timed_mutex๏ผC++14๏ผshared_mutex+ ่ถ ๆถๅ่ฝใ
๐น RAII ้ๅฐ่ฃ ๏ผlock wrappers๏ผ
่ฟไบไธๆฏไบๆฅ้๏ผ่ๆฏโไธ้็ฎก็็ฑปโ๏ผๆ้ ๆถไธ้๏ผๆๆๆถ่งฃ้๏ผ
-
std::lock_guard-
ๆ็ฎๅ็ RAII ๅฐ่ฃ ๏ผๅช่ฝ็ฎก็ไธไธช้ใ
std::lock_guard<std::mutex> guard(m); -
-
std::unique_lock-
ๆด็ตๆดป๏ผๅฏไปฅๅปถ่ฟไธ้ใๆๅ่งฃ้ใ่ฝฌ็งปๆๆๆใ
std::unique_lock<std::mutex> ulock(m, std::defer_lock); ulock.lock(); -
-
std::scoped_lock๏ผC++17๏ผ- ไธๆฌก็ฎก็ๅคไธช้๏ผ้ฟๅ ๆญป้ใ
-
std::shared_lock๏ผC++14/17๏ผ
- ไธ้จ็จไบ
shared_mutex๏ผ่กจ็คบโๅ ฑไบซ่ฏป้โใ
3. ๅฐๆป็ป
-
ไบๆฅ้็ฑป๏ผ
mutexๅฎถๆ๏ผ๏ผๆงๅถ่ฎฟ้ฎใ -
ๅฐ่ฃ ็ฑป๏ผ
lock_guardใunique_lockใscoped_lockใshared_lock๏ผ๏ผ็ฎๅ็ฎก็๏ผไฟ่ฏๅผๅธธๅฎๅ จใ
ๅธธ็จ้ๆฉ๏ผ
-
ๅช้่ฆ็ฎๅไธ้ โ
std::lock_guardใ -
้่ฆ็ตๆดปๆงๅถ๏ผๅปถ่ฟไธ้ใ่งฃ้๏ผ โ
std::unique_lockใ -
ๅค้้ฟๅ ๆญป้ โ
std::scoped_lockใ -
่ฏปๅคๅๅฐๅบๆฏ โ
std::shared_mutex+std::shared_lockใ