6.8 扩展线程接口类(3)
在程序清单6-5中,创建了4个filter_threads。下面是程序清单6-5的输出:
- Proteus:Stand Alone Complex:32
-
- ----------------------
- priority: 7
- ----------------------
- policy: FIFO priority:5
- state: policy: DETACHEDFIFO
-
- scope: state: PROCESSJOINABLE
-
-
- scope: SYSTEM
-
- Krell Space:4
- ----------------------
- priority: 3
- policy: OTHER
- state: JOINABLE
- scope: PROCESS
-
- Cylon Space:5
- ----------------------
- priority: 2
- policy: FIFO
- state: JOINABLE
- scope: PROCESS
主线程不等待分离的线程(Proteus),输出有一些混乱。Proteus开始进行输出,然后被来自Stand Alone Complex的输出打断。如前所述,标准cout不是线程安全的。如果所有的线程都是可结合的,那么输出将会像您所期望的那样:
- Proteus:2
- ----------------------
- priority: 7
- policy: FIFO
- state: JOINABLE
- scope: PROCESS
-
- Stand Alone Complex:3
- ----------------------
- priority: 5
- policy: FIFO
- state: JOINABLE
- scope: SYSTEM
-
- Krell Space:4
- ----------------------
- priority: 3
- policy: OTHER
- state: JOINABLE
- scope: PROCESS
-
- Cylon Space:5
- ----------------------
- priority: 2
- policy: FIFO
- state: JOINABLE
- scope: PROCESS
程序概要6-2
程序名:
- program6-2.cc
描述:
示范filter_thread类的使用。创建了4个线程,对每个线程进行了命名。每个线程调用更改将要创建的线程的一些属性的方法。
必需的库:
- libpthread
必需的头文件:
- thread_object.h
编译和链接指令:
- c++ -o program6-2 program6-2.cc thread_
object.cc filter_thread.cc -lpthread
测试环境:
- Solaris 10、gcc 3.4.3和gcc 3.4.6
处理器:
- AMD Opteron和UltraSparc T1
执行指令:
- ./program6-2
thread_object类封装了线程属性对象的部分功能。filter_thread是用户线程,它继承了thread_object并定义了do_something( ),该函数由线程执行。在第7章中,将会再次扩展这个类的功能,以构成用作流水线模型中的一部分的assertion类。