在不确定生产者的生产速度是快还是慢的场景里,不能只使用互斥锁保护共享的数据,这样会对CPU的性能开销非常大,可以使用互斥锁+条件变量的方式,当生产者线程生产了一个数据,就唤醒消费者线程进行消费,避免一些无用功的性能开销。
}// 消费者线程函数voidConsumer(intid){intdata =0;do{// 智能锁,初始化后即加锁,保护的范围是代码花括号内,花括号退出即会自动解锁// 可以手动解锁,从而控制互斥锁的细粒度std::unique_lock<std::mutex>locker( g_mutex );// 队列不为空if( !g_deque.empty() ) {// 取出队列里最后一个数据data ...
初始化后即加锁,保护的范围是代码花括号内,花括号退出即会自动解锁// 可以手动解锁,从而控制互斥锁的细粒度std::unique_lock<std::mutex>locker( g_mutex );// wait()函数会先调用互斥锁的unlock()函数,然后再将自己睡眠,在被唤醒后,又会继续持有锁,保护后面的队列操作// 必须使用unique_lock,不能使用lock...