在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 读写锁,写优先原文:https://blog.csdn.net/mymodian9612/article/details/52794980
2. std::mutex(C++11)原文:https://zh.cppreference.com/w/cpp/thread/mutex
mutex 类是能用于保护共享数据免受从多个线程同时访问的同步原语。 mutex 提供排他性非递归所有权语义: 调用方线程从它成功调用 lock或 try_lock开始,到它调用 unlock为止占有 mutex 。 线程占有 mutex 时,所有其他线程若试图要求 mutex 的所有权,则将阻塞(对于lock 的调用)或收到 false 返回值(对于 try_lock). 调用方线程在调用 lock或 try_lock 前必须不占有 mutex 。 若 mutex 在仍为任何线程所占有时即被销毁,或在占有 mutex 时线程终止,则行为未定义。 std::mutex 既不可复制亦不可移动。
注意 通常不直接使用 std::mutex ,用std::unique_lock、std::lock_guard 或 std::scoped_lock (C++17 起)以更加异常安全的方式管理锁定。 3. std::condition_variable(C++11)原文:https://zh.cppreference.com/w/cpp/thread/condition_variable condition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。 有意修改变量的线程必须: 1.获得 std::mutex (典型地通过 std::lock_guard ) 2.在保有锁时进行修改 3.在 std::condition_variable 上执行 notify_one 或 notify_all (不需要为通知保有锁) 即使共享变量是原子的,也必须在互斥下修改它,以正确地发布修改到等待的线程。 任何有意在 std::condition_variable 上等待的线程必须: 1.获得 std::unique_lock<std::mutex> ,在与用于保护共享变量者相同的互斥上 2.执行 wait 、 wait_for 或 wait_until ,等待操作自动释放互斥,并悬挂线程的执行。 3.condition_variable 被通知时,时限消失或虚假唤醒发生,线程被唤醒,且自动重获得互斥。之后线程应检查条件,若唤醒是虚假的,则继续等待。 std::condition_variable 只可与 std::unique_lock<std::mutex> 一同使用;此限制在一些平台上允许最大效率。 std::condition_variable_any 提供可与任何基本可锁定 (BasicLockable) 对象,例如 std::shared_lock 一同使用的条件变量。 condition_variable 容许 wait 、 wait_for 、 wait_until 、 notify_one 及 notify_all 成员函数的同时调用。 类 std::condition_variable 是标准布局类型 (StandardLayoutType) 。它不可复制构造 (CopyConstructible) 、可移动构造 (MoveConstructible) 、可复制赋值 (CopyAssignable) 或可移动赋值 (MoveAssignable) 。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论