第一范文网 - 专业文章范例文档资料分享平台

C++ boost库总结

来源:用户分享 时间:2025/6/1 14:08:27 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

mu1.unlock(); // 逐个解锁 mu2.unlock();

9. 多线程仅执行一次初始化需要使用一个once_flag对象,并把它初始化为

BOOST_ONCE_INIT,然后使用call_once()来调用初始化函数,完成仅执行一次的初始化

once_flag of = BOOST_ONCE_INIT; // 一次初始化标志

void call_func() { call_once(of, init_count); } // 执行一次初始化 int main() {

(thread(call_func)); // 必须用括号括住临时对象,否则编译器会认为这是个空thread对象声明 (thread(call_func));

this_thead::sleep(posix_time::seconds(1)); // 等待1秒钟 }

10. barrier(护栏)可用于多个线程同步,当线程执行到barrier时必须等待,直到所

有的线程都达到这个点时才能继续执行。

11. thread_specific_ptr实现可移植的线程本地存储机制(thread local storage,

TLS)或线程专有存储(thread specific storage, TSS),可以简化多线程应用,提高性能

void printing() {

thread_specific_ptr pi; // 线程本地存储一个整数 pi.reset(new int()); // 直接用reset()函数赋值

++(*pi); // 递增

mutex::scoped_lock lock(io_mu); // 锁定io流操作 cout << \}

12. this_thread名字空间下提供了at_thread_exit(func),允许注册一个线程结束回

调,无论线程是否被中断。但线程意外终止的情况下,该回调不会被执行

13. promise和packaged_task都支持回调函数,可以让future延后在需要的时候

获得值,而不必主动启动线程计算

14. asio库基于OS提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植

的异步或同步IO操作,而且并不要求使用多线程和锁。目前asio主要关注与网络通信方面,支持TCP、ICMP、UDP等网络通信协议,还支持串口读写、定时器、SSL等功能。asio是一个很好的富有弹性的框架,可以扩展到其他有异步操作需要的领域。

15. asio库基于前摄器模式(Proactor)封装了OS的select、poll/epoll、kqueue、

overlapped I/O等机制,实现了异步IO模型。它的核心类是io_service,相当于前摄器模式中的Proactor角色,asio的任何操作都需要有io_service的参数与。

1. 在同步模式下,程序发起一个IO操作,向io_service提交请求,io_service

把操作转交给OS,同步的等待。当IO操作完成时,OS通知io_service,然后io_service再把结果发回给程序,完成整个同步流程。

2. 异步模式下,程序出了要发起IO操作,还要定义一个用于回调的完成处理

函数。io_service同样把IO操作转交给操作系统执行,但它不同步等待,而是立即返回。调用io_service的run()成员函数可以等待异步操作完成,当异步操作完成时io_service从OS获取操作结果,调用完成处理函数

3. asio不直接使用OS提供的线程,而是定义了strand以保证在多线程环境

中无需使用互斥量。io_service::strand::wrap()可以包装一个函数在strand中执行

4. asio提供了mutable_buffer和const_buffer两种可安全用于异步读写的

缓冲区

1. ip::address表示IP地址,可以同时支持ipv4和ipv6两种地址 2. ip::tcp::endpoint表示ip地址和端口号 3. 同步socket示例:

1. Server:

int main() { try {

cout << \

io_service ios; // asio程序必需的io_service对象

ip::tcp::acceptor acceptor(ios, ip::tcp::endpoint(ip::tcp::v4(), 6688);

cout << acceptor.local_endpoint().address() << end; while(true) {

ip::tcp::socket sock(ios);

acceptor.accept(sock); // 阻塞等待socket连接

cout << \ sock.write_some(buffer(\发送数据。不能直接把数组、vector等容器用做asio的读写参数,必须通过buffer()函数包装 } }

catch(std::exception& e) { cout << e.what() << endl; } }

2. Client:

void client(io_service& ios) { try {

cout << \

ip::tcp::socket sock(ios); // 创建socket对象

ip::tcp::endpoint ep(ip::address::from_string(\6688); // 创建连接端点 sock.connect(ep);

vector str(100, 0);

sock.read_some(buffer(str)); // 使用buffer包装缓冲区接收数据 cout << \<< &str[0] << endl; }

搜索更多关于: C++ boost库总结 的文档
C++ boost库总结.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3c4u394qk59jajr88ky455t2h95x5500w97_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top