文档库

最新最全的文档下载
当前位置:文档库 > linux操作系统-实验-Linux-多线程编程

linux操作系统-实验-Linux-多线程编程

《操作系统》实验报告

linux操作系统-实验-Linux-多线程编程

linux操作系统-实验-Linux-多线程编程

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

linux操作系统-实验-Linux-多线程编程

五、思考题

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

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

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

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

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

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

linux操作系统-实验-Linux-多线程编程

代码:

#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");

}