Boost 库多线程编程一

多线程,什么是多线程?

每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。也就是说,线程是程序执行中运行的最小单元,所以线程基本上是轻量级的进程。随着现在硬件水平,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值