std::unique_lock<std::mutex> lock(mtx); // 获取互斥锁 cv.wait(lock, []{ return ready; }); // 等待条件满足(缓冲区有产品) std::cout << "Consumed: " << data << std::endl; // 消费产品 这段代码,互斥锁是什么时候加上的
时间: 2024-04-20 14:26:07 浏览: 94
互斥锁示例代码
在这段代码中,互斥锁是在std::unique_lock<std::mutex> lock(mtx);这一行代码中被加上的。lock对象的创建会自动获取互斥锁,保证了在后续的操作中只有一个线程能够访问临界区。这样可以防止多个线程同时修改或访问共享资源,确保了线程安全性。
在cv.wait(lock, []{ return ready; });这一行代码中,线程会等待条件ready满足。这里的wait函数会自动释放互斥锁,并使线程进入等待状态,直到条件满足或被其他线程唤醒。一旦条件满足或被唤醒,线程会重新获取互斥锁,并继续执行后续的代码。
因此,在这段代码中,互斥锁是在std::unique_lock<std::mutex> lock(mtx);这一行代码中加上的,而在cv.wait(lock, []{ return ready; });之前互斥锁已经被获取,并在等待条件满足时自动释放和重新获取。
阅读全文