实验三

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

操作系统课内实验报告

实验名称:线程实验

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

班 级:计科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<MAX_THREAD; i++)循环,使sum += counter[i];此时sum的值便比 main_counter的值小了。再输出个各线程巡行的次数,及main_counter和sum的值,结果与预期的理论值不符。
  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 <stdio.h> 

 #include <sys/types.h>

 #include <unistd.h> 

 #include <ctype.h>

 #include <pthread.h> 

 #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<MAX_THREAD; i++)    
       { 
       
                /* 在这里填写代码,用pthread_create建一个普通的线程,
                 *
                 *                                   线程id存入pthread_id[i],线程执行函数是thread_worker
                 *
                 *                       并i作为参数传递给线程 */
        pthread_create(&pthread_id[i],NULL,thread_worker,&arr[i]);
       
        }
    //加锁
    // pthread_mutex_lock(&mutex);
 
     do {/* 用户按一次回车执行下面的循环体一次。按q退出 */ 
         
                unsigned long long sum = 0;
         
                /* 求所有线程的counter的和 */
         
         
         
          for (i=0; i<MAX_THREAD; i++) 
          {/* 求所有counter的和 */
          
             sum += counter[i]; 
                                        
             printf("%llu\n",counter[i]); 
                                    
          }
          printf("%llu/%llu\n", main_counter, sum);   
        }while ((ch = getchar()) != 'q');
     //解锁
     //pthread_mutex_unlock(&mutex);
     //pthread_mutex_destroy(&mutex);
     //pthread_mutex_destory(&mutext);
 
    return 0;
    }
 
 void* thread_worker(void* p) { 
 
      int thread_num;  
 
     /* 在这里填写代码,把main中的i的值传递给thread_num */
     thread_num=*((int *)p);
 
     for(;;)
     { /* 无限循环 */
       //pthread_mutex_lock(&mutext);
     
         counter[thread_num]++; /* 本线程的counter加一 */ 
             
        main_counter++; /* 主counter 加一 */
       // sleep(1);
       // pthread_mutex_unlock(&mutext);
             
     } 
 
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 实验要求 实验要求参考实验楼课程。 实验目的 掌握Linux下的多进程编程技术; 通过对进程运行轨迹的跟踪来形象化...
    快把节操捡起来阅读 1,986评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,565评论 18 399
  • 一. 实验目的及实验环境 (一) 实验环境 Linux 操作系统 (二)实验目的 实验1 掌握Linux基本命令 ...
    黎涛note阅读 2,625评论 0 1
  • 广中医偌大的校园春雨过后挺好看的,就是操场粗糙得风过尘土飞扬。吃饭时我们讲起高中时的志愿,医生说幸好没被国防...
    peng格林T阅读 322评论 0 0
  • 晚上下班回家,窝在沙发里再不愿动。感受到深深地无力感。今天为什么这样?是白天我太争强好斗,对同事对老板都有...
    齐文2017阅读 248评论 4 2