初始化后即加锁,保护的范围是代码花括号内,花括号退出即会自动解锁// 可以手动解锁,从而控制互斥锁的细粒度std::unique_lock<std::mutex>locker( g_mutex );// wait()函数会先调用互斥锁的unlock()函数,然后再将自己睡眠,在被唤醒后,又会继续持有锁,保护后面的队列操作// 必须使用unique_lock,不能使用lock...
}// 消费者线程函数voidConsumer(intid){intdata =0;do{// 智能锁,初始化后即加锁,保护的范围是代码花括号内,花括号退出即会自动解锁// 可以手动解锁,从而控制互斥锁的细粒度std::unique_lock<std::mutex>locker( g_mutex );// 队列不为空if( !g_deque.empty() ) {// 取出队列里最后一个数据data ...
在不确定生产者的生产速度是快还是慢的场景里,不能只使用互斥锁保护共享的数据,这样会对CPU的性能开销非常大,可以使用互斥锁+条件变量的方式,当生产者线程生产了一个数据,就唤醒消费者线程进行消费,避免一些无用功的性能开销。
本⽂以最简单⽣产者消费者模型,通过运⾏程序,观察该进程的cpu使⽤率,来对⽐使⽤互斥锁和互斥锁+条件变量的性能⽐较。本例⼦的⽣产者消费者模型,1个⽣产者,5个消费者。⽣产者线程往队列⾥放⼊数据,5个消费者线程从队列取数据,取数据前需要判断⼀下队列中是否有数据,这个队列是...