本文将介绍 C++ 中常用的锁,包括 std::mutex、std::unique_lock、std::shared_mutex、std::timed_mutex、std::recursive_mutex 和std::lock_guard,并通过示例说明每种锁的原理、使用方式及其适用场景。 1. std::mutex(互斥锁) 原理 std::mutex 是最基本的互斥
std::shared_mutex std::timed_mutex std::recursive_timed_mutex std::scoped_lock std::unique_lock std::defer_lock_t, std::try_to_lock_t, std::adopt_lock_t std::lock std::try_lock std::defer_lock, std::try_to_lock, std::adopt_lock std::once_flag std::call_once std::condition...
类unique_lock满足基本可锁定(BasicLockable)要求。若Mutex满足可锁定(Lockable)要求,则unique_lock亦满足可锁定(Lockable)要求(例如:能用于std::lock) ;若Mutex满足可定时锁定(TimedLockable)要求,则unique_lock亦满足可定时锁定(TimedLockable)要求。 模板形参 ...
std::timed_mutex std::recursive_timed_mutex 2.2 条件变量(对应pthread_cond_t): std::condition_variable std::condition_variable_any 2.3 其他相关的同步原语: std::lock_guard std::unique_lock std::shared_lock (C++14) #include <iostream> #include <thread> #include <mutex> #include...
std::lock_guard std::unique_lock std::scoped_lock std::scoped_lock与std::lock_guard类似,它接收数量可变的互斥体,可以获取多个锁。 std::lock_guard比较轻量级,执行速度比std::unique_lock更快,但是std::unique_lock用法更灵活。std::lock_guard创建对象即加锁,不能显式的调用lock()和unlock(),而std...
std::mutex,最基本的 Mutex 类。 std::recursive_mutex,递归 Mutex 类。 std::time_mutex,定时 Mutex 类。 std::recursive_timed_mutex,定时递归 Mutex 类。 Lock 类(两种) std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。 std::unique_lock,与 Mutex RAII 相关,方便线程对互斥量上锁,但提供...
在C++中,互斥锁通常与std::lock_guard或std::unique_lock结合使用,这些类提供了RAII(资源获取即初始化)模式的封装,确保互斥锁会在离开作用域时自动解锁,从而避免死锁。 注意:不用std::lock_guard也可以啊 简单demo如下: #include <iostream> #include <mutex> #include <thread> #include <vector> // 共享数...
std::condition_variable 只可与 std::unique_lockstd::mutex 一同使用;此限制在一些平台上允许最大效率。 std::condition_variable_any 提供可与任何基本可锁定 (BasicLockable) 对象,例如 std::shared_lock 一同使用的条件变量。 condition_variable 容许 wait 、 wait_for 、 wait_until 、 notify_one 及 not...
std::thread:用于创建和管理线程。 std::mutex 和 std::recursive_mutex:用于提供互斥锁,保护共享资源。 std::lock_guard 和 std::unique_lock:用于简化互斥锁的管理。 std::condition_variable:用于线程间的条件同步。 std::async:用于异步执行函数和获取函数的返回值。
1、unique_ptr 一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数的智能指针。当您想要将一个原始指针分配给多个所有者时使用...