实验三

西 安 邮 电 大 学 (计算机学院)

操作系统课内实验报告

实验名称:线程实验

专业名称:计算机科学与技术

班 级:计科1503

学生姓名:魏新超

学号(8位):04151091

指导教师:陈莉君

实验日期:2017年4月18日

一. 实验目的及实验环境
通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。掌握POSIX 规范中pthread_create() 函数的功能和使用方法。
实验环境:deepin-15.3

二. 实验内容

  1. 你最初认为前三列数会相等吗?最后一列斜杠两边的数字是相等,还是大于或者小于关系?
    不想等,最后一列两边数字是相等的,前三列的调度是不同的
  2. 最后的结果如你所料吗?有什么特点?对原因进行分析。
    不是的,结果是最后一列两边的数字不是相等的,前面的小于后面的,因为main_counter属于临界资源,可能会出现当一个线程正在执行 main_counter++时,另一个线程也要执行main_counter++的情况,这样就会使 main_counter的值不准确。又线程运行顺序的不确定性(交替性),可能在一个线程执行main_counter++后,还未执行counter[thread_num]++时,CPU便被主线程抢去,执行for(i = 0;i
  3. thread 的CPU 占用率是多少?为什么会这样?
    我测试的结果是157.9%,因为三个线程一直在死循环里无法退出,所以导致cpu占用率明显增大
  4. thread_worker()内是死循环,它是怎么退出的?你认为这样退出好吗?
    按q退出,这样不好,子进程强制退出。
    三.方案设计
    按照注释里的要求把代码补充完整,正确编译程序后,先预计一下这个程序的运行结果。具体的结果会是什么样?运行程序。开另一个终端窗口,运行“ps aux”命令,看看thread 的运行情况,注意查看thread 的CPU 占用率,并记录下这个结果。

四.测试数据及运行结果

![V8`RD@R]N)3YS6]KWP0D.png

4OJJ0I1HX91C4D9G)MO4222.png

五.总结

在本实验中了解到进程线程的创建等相关系统调用。pthread_create() 函数的功能和使用方法。对缓冲区有一定的了解。

六.附录:源代码(电子版, 纸质版不打印)

#include  

 #include 

 #include  

 #include 

 #include  

 #define MAX_THREAD 3 /* 线程的个数 */

 unsigned long long main_counter, counter[MAX_THREAD]; 

 /* unsigned long  long是比long还长的整数 */

 //unsigned long long main_counter,counter[MAX_THREAD];
 //pthread_mutex_mutex=PTHREAD_MUTEX_INITIALIZER;
 void* thread_worker(void*); 

 int main(int argc, char* argv[])

 { 
 
       int i, rtn, ch; 
 
       pthread_t pthread_id[MAX_THREAD] = {0}; /* 存放线程id*/ 
       int arr[MAX_THREAD]={0,1,2}; 
 
       for (i=0; i

你可能感兴趣的:(实验三)