合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 附录B 并发库的简单比较 虽然,C++11才开始正式支持并发,不过,高级编程语言都支持并发和多线程已经不是什么新鲜事了。例如,Java在第一个发布版本中就支持多线程编程,在某些平台上也提供符合POSIX C标准的多线程接口,还有[Erlang](http://www.erlang.org/)支持消息的同步传递(有点类似于MPI)。当然还有使用C++类的库,比如Boost,其将底层多线程接口进行包装,适用于任何给定的平台(不论是使用POSIX C的接口,或其他接口),其对支持的平台会提供可移植接口。 这些库或者变成语言,已经写了很多多线程应用,并且在使用这些库写多线程代码的经验,可以借鉴到C++中,本附录就对Java,POSIX C,使用Boost线程库的C++,以及C++11中的多线程工具进行简单的比较,当然也会交叉引用本书的相关章节。 <table border=1> <td> 特性 </td> <td> 启动线程 </td> <td> 互斥量 </td> <td> 监视/等待谓词 </td> <td> 原子操作和并发感知内存模型 </td> <td> 线程安全容器 </td> <td> Futures(期望) </td> <td> 线程池 </td> <td> 线程中断 </td> <tr> <td>章节引用</td> <td>第2章</td> <td>第3章</td> <td>第4章</td> <td>第5章</td> <td>第6章和第7章</td> <td>第4章</td> <td>第9章</td> <td>第9章</td> </tr> <tr> <td rowspan=3> C++11 </td> <td rowspan=3> std::thread和其成员函数 </td> <td> std::mutex类和其成员函数 </td> <td> std::condition_variable </td> <td> std::atomic_xxx类型 </td> <td rowspan=3> N/A </td> <td> std::future<> </td> <td rowspan=3> N/A </td> <td rowspan=3> N/A </td> </tr> <tr> <td> std::lock_guard<>模板 </td> <td rowspan=2> std::condition_variable_any类和其成员函数 </td> <td> std::atomic<>类模板 </td> <td> std::shared_future<> </td> </tr> <tr> <td> std::unique_lock<>模板 </td> <td> std::atomic_thread_fence()函数 </td> <td> std::atomic_future<>类模板 </td> </tr> <tr> <td rowspan=3> Boost线程库 </td> <td rowspan=3> boost::thread类和成员函数 </td> <td> boost::mutex类和其成员函数 </td> <td> boost::condition_variable类和其成员函数 </td> <td rowspan=3> N/A </td> <td rowspan=3> N/A </td> <td> boost::unique_future<>类模板</td> <td rowspan=3> N/A </td> <td rowspan=3> boost::thread类的interrupt()成员函数</td> </tr> <tr> <td> boost::lock_guard<>类模板 </td> <td rowspan=2> boost::condition_variable_any类和其成员函数 </td> <td rowspan=2> boost::shared_future<>类模板</td> </tr> <tr> <td> boost::unique_lock<>类模板 </td> </tr> <tr> <td rowspan=4> POSIX C </td> <td> pthread_t类型相关的API函数 </td> <td> pthread_mutex_t类型相关的API函数</td> <td> pthread_cond_t类型相关的API函数</td> <td rowspan=4> N/A </td> <td rowspan=4> N/A </td> <td rowspan=4> N/A </td> <td rowspan=4> N/A </td> <td rowspan=4> pthread_cancel() </td> </tr> <tr> <td> pthread_create() </td> <td> pthread_mutex_lock() </td> <td> pthread_cond_wait() </td> </tr> <tr> <td> pthread_detach() </td> <td> pthread_mutex_unlock() </td> <td> pthread_cond_timed_wait() </td> </tr> <tr> <td> pthread_join() </td> <td> 等等 </td> <td> 等等 </td> </tr> <tr> <td> Java </td> <td> java.lang.thread类 </td> <td> synchronized块 </td> <td> java.lang.Object类的wait()和notify()函数,用在内部synchronized块中 </td> <td> java.util.concurrent.atomic包中的volatile类型变量 </td> <td> java.util.concurrent包中的容器 </td> <td> 与java.util.concurrent.future接口相关的类 </td> <td> java.util.concurrent.ThreadPoolExecutor类 </td> <td> java.lang.Thread类的interrupt()函数 </td> </tr> </table>