c++多线程条件变量
发布时间
阅读量:
阅读量
条件变量condition_variable、wait()、notify_one()(通知一个线程)
1.1 condition_variable本质上属于一个类,该类与条件相关,用于等待某一特定条件的实现。此类在使用过程中必须与互斥量协同操作,因此在实际应用中需要创建该类的实例。
1.2.1 wait()函数的功能是等待某个事件的发生。若其第二个参数所对应的lambda表达式返回值为true,则wait()函数会立即返回;反之,若返回值为false,则wait()函数将释放互斥量,并进入阻塞状态,直至其他线程调用notify_one()成员函数为止。当wait()函数未提供第二个参数时,其处理方式等同于lambda表达式返回false的情况。
1.2.2 当某一运行中的线程调用notify_one()以唤醒处于阻塞状态的wait()时,在恢复执行后,该函数将持续尝试重新获取互斥量锁。若未能成功获取锁,则流程将再次进入等待状态;若成功获取锁,则进一步判断是否提供了第二个参数。如已提供,则对lambda表达式的值进行验证:若结果为true,则wait()函数结束并继续执行后续流程(此时互斥锁仍处于锁定状态);若结果为false,则释放互斥锁并重新进入睡眠阻塞状态。当没有参数或结果等同于true时,处理方式一致。
注:notify_one的作用并不一定能够迅速唤醒处于等待状态的
全部评论 (0)
还没有任何评论哟~
