解锁(Unlocking):使用std::mutex::unlock()方法释放锁,使得等待的线程有机会获取锁并继续执行。 std::mutex mtx; int shared_data = 0; void thread_function() { std::lock_guard<std::mutex> lock(mtx); // 自动锁住和解锁 shared_data++; // 受保护的操作 } 1. 2. 3. 4. 5. 6. 7. 2. ...
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 相关,方便线程对互斥量上锁,但提供...
std::mutex mutexTest;mutexTest.lock();//do somethingmutexTest.unlock(); 1. 2. 3. 4. 5. std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。 lock_guard 类是一个mutex封装者,它为了拥有一个或多个mutex而提供了一种方便的 RAII style 机制。( 译注:所谓的RAII,全称为Resource Acquisition...
std::recursive_mutex允许同一个线程对互斥量多次上锁(即递归上锁),来获得对互斥量对象的多层所有权,std::recursive_mutex释放互斥量时需要调用与该锁层次深度相同次数的unlock(),可理解为lock()次数和unlock()次数相同,除此之外,std::recursive_mutex的特性和std::mutex大致相同。
1.lock和unlock必须成对出现,否则可能引起未定义行为。为了防止出现这种行为,可用std::lock_guard、std::unique_lock等RAII方式来使用mutex。 2. 尽量不要使用递归锁,主要原因如下: (1)需要用到递归锁定的多线程互斥处理往往本身就可以简化,允许递归互斥很容易放纵复杂逻辑的产生,从而导致一些多线程同步引起的晦涩问题...
lock(); ++g_num; // 注意,此互斥体也同步输出 std::cout << "id: " << id << ", g_num: " << g_num << '\n'; g_num_mutex.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(234)); } } int main() { std::thread t1(slow_increment, 0); std::thread t2(...
std::mutex mtx; // 定义一个互斥量 std::lock_guard<std::mutex> guard(mtx); // 加锁 unique_lock的功能是lock_guard的超集,unique_lock可以达到 lock_guard的效果,但是一些复杂的场景,lock_guard就没法工作了。如果只是单纯的加锁,还是建议使用lock_guard,因为unique_lock除了要维护一个锁之外,还需要维...
std::recursive_timed_mutex,定时递归 Mutex 类。 Lock 类(两种) std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。 std::unique_lock,与 Mutex RAII 相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。 其他类型 std::once_flag ...
lock(); ++g_num; std::cout << id << " => " << g_num << '\n'; g_num_mutex.unlock(); std::this_thread::sleep_for(std::chrono::seconds(1)); } } int main() { std::thread t1(slow_increment, 0); std::thread t2(slow_increment, 1); t1.join(); t2.join(); }...
std::recursive_timed_mutex,定时递归 Mutex 带超时的,递归的,独占互斥量,允许同一个线程,同一个互斥量,多次被lock,用法和非递归的一样 Lock 类(两种) std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。 std::lock_guard在构造时自动锁定其管理的mutex对象,实现了std::mutex的lock功能,而在析构...