首页 理论教育 C++STL精解:condition

C++STL精解:condition

时间:2023-10-25 理论教育 版权反馈
【摘要】:类condition_variable的声明形式为:条件变量类condition_variable除了包含构造函数和析构函数之外,还包含3个等待函数:wait、wait_for和wait_until;两个notify通知函数:notify_one()和notify_all()。下面以例16-11来说明条件变量类condition_variable的用法,以例16-12来说明std命名空间公用notify_all_at_thread_exit()函数的用法,以例16-13来说明notify_one()的用法,以例16-14来说明wait_for()和wait_until()的用法。图16-13 例16-13的执行效果在讲述wait_for()和wait_until()两个成员函数时,首先需要讲述的是枚举类型cv_sta-tus。该枚举值表示wait_for或者wait_until超时。

C++STL精解:condition_variable类

类condition_variable的声明形式为:

978-7-111-51399-5-Chapter16-57.jpg

条件变量类condition_variable除了包含构造函数和析构函数之外,还包含3个等待函数:wait、wait_for和wait_until;两个notify通知函数:notify_one()和notify_all()。

•wait()函数用于等待通知(notify)。

•wait_for()函数用于等待某时间长度,或者等待至通知。

•wait_until()函数用于等待被通知,或者等待至某时间点。

•notify_one()函数用于通知一个线程

•notify_all()函数用于通知所有线程。

公用notify_all_at_thread_exit()函数的用法为:

978-7-111-51399-5-Chapter16-58.jpg

notify_all_at_exit()函数的功能是:当调用本函数的线程退出时,所有依托条件变量cond上等待的线程全部收到通知。

下面以例16-11来说明条件变量类condition_variable的用法,以例16-12来说明std命名空间公用notify_all_at_thread_exit()函数的用法,以例16-13来说明notify_one()的用法,以例16-14来说明wait_for()和wait_until()的用法。

例16-11

978-7-111-51399-5-Chapter16-59.jpg

978-7-111-51399-5-Chapter16-60.jpg

例16-11的执行效果如图16-11所示。

978-7-111-51399-5-Chapter16-61.jpg

图16-11 例16-11的执行效果

例16-12

978-7-111-51399-5-Chapter16-62.jpg

978-7-111-51399-5-Chapter16-63.jpg(www.xing528.com)

例16-12的执行效果如图16-12所示。

978-7-111-51399-5-Chapter16-64.jpg

图16-12 例16-12的执行效果

例16-13

978-7-111-51399-5-Chapter16-65.jpg

978-7-111-51399-5-Chapter16-66.jpg

例16-13的执行效果(请读者根据输出结果,琢磨一下线程的执行顺序)如图16-13所示。

978-7-111-51399-5-Chapter16-67.jpg

图16-13 例16-13的执行效果

在讲述wait_for()和wait_until()两个成员函数时,首先需要讲述的是枚举类型cv_sta-tus。枚举类型cv_status包含如下两个枚举值:

1)cv_status::no_timeout。该枚举值表示wait_for或者wait_until没有超时,即在规定的时间段内线程收到了通知。

2)cv_status::timeout。该枚举值表示wait_for或者wait_until超时。

wait_for()函数和wait_until()函数均有两种使用形式,本节给出其中一种,另一种读者可自己耐心琢磨一下。

例16-14

978-7-111-51399-5-Chapter16-68.jpg

978-7-111-51399-5-Chapter16-69.jpg

例16-14的执行效果如图16-14所示。

978-7-111-51399-5-Chapter16-70.jpg

图16-14 例16-14的执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈