Boost 库多线程编程一
来源:互联网 发布:java set 取值 编辑:程序博客网 时间:2024/05/22 13:01
多线程,什么是多线程?
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。也就是说,线程是程序执行中运行的最小单元,所以线程基本上是轻量级的进程。随着现在硬件水平,CPU,内存的极大提高,并发编程是一种趋势。
线程优点
1. 线程可以将占据时间长的任务放到后台去处理
如用户界面界面上点击了某个按钮,可以弹出一个进度条来显示处理进度。
2. 程序的运行速度可能加快
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
缺点
大量线程,操作系统切换,耗费性能。
更多的线程需要更多的内存空间。
需要预防死锁等等
任何事务都有两面性,显然多线程编程对程序员的要求也就比较高,考虑问题需要更全面。
OK,废话不多说,HelloWord是个宝,还是先从简单的HelloWord来入门。
例一
#include <boost/thread/thread.hpp>#include <iostream>void helloworld(){ std::cout << "Hello World!" << std::endl;}int main(){ boost::thread thrd(&helloworld); thrd.join();}简单编译一下
g++ -I /home/liuyc/app/boost/include -L /home/liuyc/app/boost/lib -o hello1 helloworld.cpp -lboost_thread -lpthread -lrt -lboost_system
可以看到,boost创建线程还是蛮简单的,只有两个操作,boost::thread 声明一个线程,join中断释放线程。
[liuyc@unbuntu tutorial]$hello1
Hello World!
上面的例子很简单,线程就是调用一个helloword函数没有传递参数
例二
#include <boost/thread/thread.hpp>#include <iostream>struct helloworld{ helloworld(const char* who) : m_who(who) { } void operator()() { std::cout << m_who << "says, \"Hello World.\"" << std::endl; } const char* m_who;};int main(){ boost::thread thrd(helloworld("Bob")); thrd.join();}简单编译一下
g++ -I /home/liuyc/app/boost/include -L /home/liuyc/app/boost/lib -o hello2 helloworld2.cpp -lboost_thread -lpthread -lrt -lboost_system
这个例子也比较简单,定义了一个结构体,调用传递一个结构体参数“Bob”,
执行结果:
[liuyc@unbuntu tutorial]$hello2
Bobsays, "Hello World."
例子三
#include <boost/thread/thread.hpp>#include <boost/bind.hpp>#include <iostream>void helloworld(const char* who){ std::cout << who << "says, \"Hello World.\"" << std::endl;}int main(){ boost::thread thrd(boost::bind(&helloworld, "Bob")); thrd.join();}
简单编译一下
g++ -I /home/liuyc/app/boost/include -L /home/liuyc/app/boost/lib -o hello3 helloworld3.cpp -lboost_thread -lpthread -lrt -lboost_system执行结果:
[liuyc@unbuntu tutorial]$hello3
Bobsays, "Hello World."
例子三用到了boost库里面另一个强大函数,bind,bind函数其实标准STL库里面已经有了,但是boost封装过后就更强大了,这个后面文章有机会给大家介绍。上面的例子也很清晰,把Bob这个参数绑定到函数helloword。
参考文档
多线程百科
boost库在工作(16)线程之一
注:大牛的文章值得一读。
- Boost 库多线程编程一
- Boost 库多线程编程二
- Boost 库多线程编程三
- Boost 库多线程编程四
- 【C++多线程编程】Boost线程库
- boost多线程编程
- Boost 多线程编程
- Boost多线程编程
- Boost多线程编程
- Boost多线程编程
- Boost多线程编程
- Boost多线程编程
- Boost多线程编程
- [Boost基础]并发编程——Thread多线程(一)
- 关于 boost 多线程(一)
- Boost多线程编程blogdown整理
- boost多线程编程条件变量
- boost的多线程学习一
- 历届试题 地宫取宝
- python2.7.5实现ROT13编解码
- CSS定义input disabled样式
- OCP 1Z0 051 68
- 给dede栏目添加上缩略图功能
- Boost 库多线程编程一
- Kendo UI-html5 ui开源框架
- 如何获取ios应用的URL Schemes
- ubuntu下tcpdump
- C++的map类
- 3DS MAX 导出FBX到Unity3D设置
- 离开学校如何自学修炼成为一名网页设计师(二)
- [Wikioi 1004]四子连棋(复习)
- WPF 窗口页面中画直线