线程是进程内部的一个执行单元,它是CPU调度和分配的基本单元。
多线程的意义:
1.提高应用程序的响应速度
2.提高多CPU系统的效率
线程与进程的比较
1.线程开销小,切换块,是一种节俭的多任务操作方式
2.线程之间的通信机制更加高效
1.linux的线程机制
系统级线程和用户级线程是线程实现的两种基本方法:区别在于线程的调度者在内核之中还是在内核外部,前者有利于并发使用
多处理器的资源,而后者则更多的考虑了上下文切换的开销。
2.线程的基本操作
线程有3种基本状态:执行、就绪和阻塞。
对应着5种基本操作:创建、阻塞、激活、调度和终止。
编写linux系统下的多线程程序,需要使用头文件pthread.h,连接时,需要使用库libpthread.a 。
1.线程的创建
pthread_creat
2.线程的合并
合并两个线程所使用的函数为pthread_join,它的作用是使一个线程等待另一个线程结束,将他们合并在一起。
3.线程的终止
1.线程自身调用pthread_exit函数
2.其他线程调用pthread_cancel函数
3.从主函数返回
4.线程所属的进程中任何线程调用exit函数导致所有线程结束
4.线程的属性
。。。。
3.线程的同步
实现线程同步的主要方式:互斥量、条件变量、和信号量
1.互斥量
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_unlock
2.条件变量
而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了这一不足,它通常和互斥量一起使用。
pthread_cond_init
pthread_cond_destroy
条件变量的等待包括两种方式:无条件等待pthread_cond_wait和计时等待pthread_cond_timedwait,计时等待是指如果
在给定时刻前条件没有满足,则返回TIMEOUT,结束等待。
条件变量的激发也包括两种方式:
激活一个等待线程pthread_cond_signal和激活所有等待线程pthread_cond_broadcast
3.信号量
他的初始化和注销函数分别为:sem_init和sem_destroy
函数sem_post用来增加信号量的值,当有线程阻塞在这个信号量时,调用这个函数会激活其中的一个线程,
函数sem_wait用来阻塞当前线程直到信号量的值大于0,解除阻塞后将信号量的值减1,