boost_thread

互斥量
  1. mutex,独占式互斥量
     a) 对象创建后表示一个互斥量
     b) 成员函数lock()用于线程阻塞等待直到获得互斥量的所有权(即锁定)
     c) try_lock()尝试锁定互斥量,如果锁定成功返回true,否则返回false,它是非阻塞的
     d) 线程使用完成共享资源后应该及时使用unlock解除对互斥量锁定
  2. try_mutex,同mutex,兼容以前版本
  3. timed_mutex,基本功能同mutex,提供超时锁定功能
     a) 成员函数timed_lock(),阻塞等待一定时间试图锁定互斥量,如果时间到还未锁定到返回false,等待的时间可以是绝对时间,也可以是从当前开始的相对时间
  4. recursive_mutex,递归式互斥量,可多次锁定,相应需多次解锁
  5. recursive_try_mutex,同recursive,兼容以前版本
  6. recursive_timed_mutex,基本功能同recursive,提供超时锁定功能
  7. shared_mutex,multiple-reader/single-writer型的共享互斥量
  8. thread库提供lock_guard类,由于辅助锁定互斥量,在构造时锁定互斥量,在析构时自动解锁,mutex类使用内部类型定义scoped_lock和scoped_try_lock定义两个guard对象,分别执行lock()和try_lock()
  9. shared_mutex允许线程获取多个共享所有权和一个专享所有权,实现读写锁机制,即多个读线程和一个写线程,shared_mutex没有提供内部的lock_guard类型定义,在使用shared_mutex时,读锁时使用shared_lock<shared_mutex>,写锁时使用unique_lock<shared_mutex>

thread类
  1. 负责启动和管理线程对象
  2. 内部把构造函数和赋值操作声明为私有,不能对它进行赋值或者拷贝构造
  3. 线程的创建需传递thread对象一个无参的可调用物,必须具有operator()供线程执行
  4. 成员函数joinable()判断thread对象是否标识一个可执行的线程体,如果返回true,可调用join()或者timed_join()来阻塞等待线程结束
  5. 使用成员函数debach()将thread与线程执行体手动分离,此后thread对象不代表任何线程体,失去对线程体控制
  6. bind库把函数所需参数绑定到一个函数对象,function则可以存储bind表达式的结果
  7. 如果joinable()返回true,成员函数get_id()返回线程id对象,thread类提供静态成员函数yield()指示当前线程放弃时间片,允许其他线程运行
  8. 成员函数interrupt()允许正在执行的线程被中断,被中断线程抛出一个thread_interrupted异常,它是一个空类,异常在线程执行函数里捕捉并处理,线程不处理异常,默认动作是中止线程

线程组thread_group
  1. 内部使用list<thread*>来容纳thread对象,private继承noncopyable
  2. 成员函数create_thread()是工厂函数,可以创建thread对象并运行线程,同时加入内部list
  3. 也可在thread_group外部创建线程对象,使用add_thread()加入到线程组
  4. 使用remove_thread可删除list里的thread对象
  5. join_all()和interrupt_all()用来对list里的所有线程对象操作,等待或者中断这些线程

中断点
  1. thread::join()
  2. thread::timed_join()
  3. condition_variable::wait()
  4. condition_variable::time_wait()
  5. condition_variable_any::wait()
  6. condition_variable_any::timed_wait()
  7. thread::sleep()
  8. this_thread::sleep()
  9. this_thread::interruption_point()
  10.前8个表示线程在阻塞等待时可以被中断,最后一个特殊中断点,不等待,起标签作用,表示线程
     在执行到这个函数所在的语句时可以被中断

条件变量
  1. 提供一种用户等待的同步机制,可以实现线程通信,必须与互斥量配合使用,等待另一个线程中某个线程中某个事件的发生,线程才能继续执行
  2. 拥有条件变量的线程先锁定互斥量,然后循环检查某个条件,如果条件不满足,就调用条件变量的成员函数wait()等待直置条件满足,其他线程处理条件变量的条件,当条件满足时调用它的成员函数notify_one()或者notify_all(),以通知一个或者所有正在等待条件变量的线程停止等待继续执行
  1. condition_variable_any::wait()
  2. condition_variable_any::notify_one()
  3. condition_variable_any::notify_all()

funture
  1. 提供一种异步操作线程返回值的方法,这个返回值在线程开始执行时还是不可用,而是一个未来的期待值,使用packaged_task和promise包装异步调用,unique_future和shared_future来获取异步调用结果
  2. packeaged_task提供operator(),包装一个可回调物,然后它就可以被任意线程调用执行,最后future值可以用成员函数get_future获得,成员函数is_ready和has_value和has_exception分别来测试unique_future是否可用,是否有值和是否发生异常,一切正常,可用get获取future值,wait可以用户阻塞等待package_task执行
  3. promise包装一个值,这个值可以作为函数的输出参数,适用于从函数参数返回值的函数,线程中set_value()设置要返回的值,用户get_future()获取future值赋给future对象

posted on 2012-10-16 12:19  kangbry  阅读(306)  评论(0编辑  收藏  举报

导航