一、线程
什么是线程?
- 线程是计算机中独立运行的最小单位,运行时占用很少的系统资源。由于每个线程占用的CPU时间是由系统分配的,因此可以把线程看作操作系统分配CPU时间的基本单位。线程是交替进行的。
线程的优点:
- 在多进程情况下,每个进程都有自己独立的地址空间,而在多线程情况下,同一进程内在线程共享进程的地址空间。因此,创建一个新的进程时就要耗费时间来为其分配系统资源,而创建一个线程花费的时间要少的多。
- 在系统调度方面,由于进程地址空间独立而线程共享地址空间,线程间的切换速度要远快过进程间的切换速度。
- 在通信机制方面,进程间的数据空间相互独立,彼此通信要以专门的通信方式进行,通信时必须经过操作系统。而同一进程内的多个线程共享数据空间,一个线程的数据可以直接提供给其他线程使用,而不必经过操作系统。因此线程间的通信更加方便省时。
- 线程可以提高应用程序的响应速度。在图像界面程序中,如果有一个非常耗时的操作,她会导致其他操作不能进行而等待这个操作,此时界面响应用户操作的速度会变得很慢。多线程环境下可以将这个非常耗时的操作由一个单独的线程来完成。这个线程在用完操作系统分配给他的时间片后,让出CPU,这样其他的操作便有机会执行了。
- 可以提高多处理器的效率。现在许多计算机都是采用多核技术,在这种情况下,可以让多个线程在不同的处理器上同时运行,从而大大提高程序执行速度。因此,多线程更能发挥硬件的潜力。
- 可以改善程序的结构。对于要处理多个命令的应用程序,可以将对每个命令的处理设计成一个线程,从而避免设计成大程序时造成的程序结构复杂。
二、创建线程
#include <pthread.h>
int pthread_create(pthread_t *thread,pthread_attr_t *attr,
(void*)(*start_routine)(void*),void *arg);
- thread:该参数是一个指针,当线程创建成功时,用来返回创建的线程ID。
- attr:该参数用于指定线程的属性,NULL表示使用默认属性,稍后将介绍该数据结构。
- start_routine:该参数为一个函数指针,指向线程创建后要调用的函数。这个被线程调用的函数也称为线程函数。
- arg:该参数指向传递给线程函数的参数。
- 线程创建成功时,pthread_create函数返回0,若不为0则说明创建线程失败。线程创建成功后,新创建的线程开始运行第三个参数所指向的函数,原来的线程继续运行。
-
pthread.h中其他的系统调用