Boost.Thread扯淡

source:http://blog.163.com/angtylook@126/blog/static/8388724820111093470947/

  之所以叫扯淡,是因为学习线程这部分时,后面一部分看不下去了,笔记也写的够烂。这里给出boost文档汉化项目地址,有兴趣的可以去下载,也期望更多有能力的朋友加进去。
boost文档汉化项目地址:http://code.google.com/p/boost-doc-zh/

Boost.Thread

   多线程是听过多了,但却从没有真正接触过。最多是在看《unix环境高级编程》时,敲过书上关于pthread库的例子。这在linux下还好,在windows下虽然也可以在mingw下使用pthread库,但总觉的不怎么爽,可是又不懂怎么使用windowswin32线程。

     boost是如何的强大早有耳闻,对它的线程库也早有学习之心。只是之前一直没有成功编译过boost,近日人品爆发,竟然成功了!所以也就了解下里面Boost.Thread库。

    书上说可以这样创建一个线程:

    boost::thread t(thread_function);

    thread_function是个函数,创建后它将在线程中立即执行。

joindetach

     boost::thread其中的两个方法join()detach(),如t.join()会让调用线程等待线程t执行完毕。但调用t.detach()就会让t从对应的线程里分离,此时t将不再代表一个线程,因此不能用t来控制已经分离了的线程。我在想这是不是说分离了的线程将无法控制。

interrupt

     线程可以被中断,这太正常了。要想中断线程,调用t.interrupt()。不过并不总是有效的,因为文档说线程唯有在Boost.Thread定义的中断点才会检查interrupt()是否被调用,如果调用那就中断并抛出boost::thread_interrupt异常。哦,对了,中断点就是预定义的一些函数,如sleep;若线程中调用这些函数,那就是一个中断点。

boost::this_thread

     boost::this_thread这个名字提供了一些独立的函数,可用于当前的线程。比如sleep()get_id()。具体有什么用,看看函数名吧,其它就查看文档吧。我真的跑去看文档了,这里记下几个感兴趣的函数吧。

    interruption_point() 测试当前线程是否被中断,是刚抛异常。

    bool interruption_requested() 是否请求中断当前线程。

线程同步

    使用线程肯定逃避不了共享资源的同步问题。想当年学操作系统时,被什么信号量,管程之类的搞到头晕,说实话现在想到这些也在头晕。当看到书上说boost提供多个互斥类,真是恐惧,不过暂时也就只学学最简单的,复杂的用到时再说。

    最简单的应该就是这样子:

    boost::mutex mutex;

    mutex.lock();

    critical section;

    mutex.unlock();

   除了上面这种形式,也可以这样:

   boost::lock_guard<boost::mutex> lock(mutex)

   critical section;

   在boost::lock_guard内部的构造与析构函数内会调用lock()unlock()。所以当critical section结束时刚好离开作用域,用lock_guard是很方便与适当的。

    boost::timed_mutex这个只支持timed_lock(),用在阻塞一段时间,时间过后无论能否获取锁都返回。boost::shared_mutex字面意思,共享互斥量,或许共享锁比较容易理解,不清楚是否可以这样理解。正如lock_guard一样,还有两个类似的boost::unique_lockboost::shared_lock,后者跟boost::shared_mutex一块用。

    同步跟线程局部存储内容很多,看的模模糊糊的,也没法继续写下去了。到此结束,他日回来看懂了,有感觉再继续。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值