Linux 多线程编程 Linux 多线程编程是操作系统课程设计的重要组成部分,多线程技术早在 60 年代就被提出,但真正应用多线程到操作系统中去,是在 80 年代中期,solaris 是这方面的佼佼者。传统的 Unix 也支持线程的概念,但是在一个进程中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括 Windows/NT,当然,也包括 Linux。 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。 使用多线程的优点包括: 1. 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。 2. 使多 CPU 系统更加有效。操作系统会保证当线程数不大于 CPU 数目时,不同的线程运行于不同的 CPU 上。 3. 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 Linux 系统下的多线程遵循 POSIX 线程接口,称为 pthread。编写 Linux 下的多线程程序,需要使用头文件 pthread.h,连接时需要使用库 libpthread.a。Linux 下 pthread 的实现是通过系统调用 clone()来实现的。clone()是 Linux 所特有的系统调用,它的使用方式类似 fork,关于 clone()的详细情况,有兴趣的读者可以去查看有关文档说明。 下面是一个简单的多线程程序 example1.c: ```c #include <pthread.h> #include <stdio.h> void thread(void){ int i; for(i=0;i<3;i++) printf("This is a pthread.\n"); } int main(void){ pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *) thread,NULL); if(ret!=0){ printf ("Create pthread error!\n"); exit (1); } for(i=0;i<3;i++) printf("This is the main process.\n"); pthread_join(id,NULL); return (0); } ``` 编译该程序:gcc example1.c -lpthread -o example1,运行 example1,可以得到以下结果: ``` This is the main process. This is a pthread. This is the main process. This is the main process. This is a pthread. This is a pthread. ``` 再次运行,可能得到以下结果: ``` This is a pthread. This is the main process. This is a pthread. This is the main process. This is a pthread. This is the main process. ```
剩余11页未读,继续阅读
- 粉丝: 0
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0