云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > C++ boost库总结

C++ boost库总结

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 4:28:30

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库总结 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

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(pos

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com