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)线程之一

注:大牛的文章值得一读。




0 0