视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
linux操作系统-实验-Linux-多线程编程
2025-09-30 23:15:45 责编:小OO
文档
《操作系统》实验报告

实验序号:5          实验项目名称:Linux 多线程编程

学  号姓  名专业、班
实验地点指导教师实验时间2015.10.13
一、实验目的及要求

通过本实验的学习,使学生掌握Linux多线程编程的基本方法。

以学生自主训练为主的开放模式组织教学

二、实验设备(软硬件环境)及要求

安装有Ubuntu系统的VMWare

三、实验内容与步骤

实验内容:利用Linux多线程实现题目所要求的功能。

实验步骤:

1、根据教材实践Linux线程管理指令

    2、利用Linux多线程编程实现以下功能:

创建两个子进程;一个子线程(生产者线程)依次向缓冲区写入整数0,1,2,...,19;另一个子线程(消费者线程)暂停3s后,从缓冲区读数,每次读一个,并将读出的数字从缓冲区删除,然后将数字显示出来;父线程等待子线程2(消费者线程)的退出信息,待收集到该信息后,父线程就返回。

四、实验结果、数据处理与过程截图

实验结果如下:

用gcc编译的时候需要加-lpthread,否则会出现以下错误:

五、思考题

多进程编程与多线程编程有何区别?

相同点:Linux下不管是多线程编程还是多进程编程,最终都是用do_fork实现

不同点:父子进程变量是互不影响的,由于父子进程地址空间是完全隔开的,变量的地址可以是完全相同的。Linux下编程多用多进程编程少用多线程编程。多线程比多进程成本低,但性能更低:多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不;多线程是平面交通系统,造价低,但红绿灯太多,老堵车。

 、多进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。

2、多线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。

3、线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在5MP机器上运行,而进程则可以跨机器迁移。

六、教师评语

签名:

日期:

成绩
代码:

#include

#include

#include

#include

#include 

char globe_buffer[100];

void *read_buffer_thread(void *arg); 

int main() 

{

int res,i; 

    pthread_t read_thread;  

for(i=0;i<20;i++)

        globe_buffer[i]=i;

   printf("\\nxiancheng  thread : write buffer finish\\n");

   sleep(3);

    res = pthread_create(&read_thread, NULL, read_buffer_thread, NULL);  

    if (res != 0)  

   {  

        printf("Read Thread creat Error!");  

        exit(0);  

    }  

   sleep(1);

    printf("waiting for read thread to finish...\\n");  

 

    res = pthread_join(read_thread, NULL);  

   if (res != 0)  

   {  

               printf("read thread join failed!\\n");  

        exit(0);  

   }

   printf("read thread xiancheng  OK, have fun!! exit ByeBye\\n");

   return 0;

void *read_buffer_thread(void *arg)

{

    int i,x;

    printf("Read buffer thread read data : \\n");

for(i=0;i<20;i++)

    {

        x=globe_buffer[i];

        printf("%d   ",x);

        globe_buffer[i]=0;

    }

   printf("\\nread over\\n");

}下载本文

显示全文
专题