线程的笔记
来源:互联网 发布:python map数据结构 编辑:程序博客网 时间:2024/06/07 01:33
线程是进程的一个实体,是CPU调度和分派的基本单位是比进程更小的能独立运行的基本单位。它是程序执行的最小单位,是进程里的一个执行路径,多个线程共同拥有系统资源,但是一个线程基本不拥有系统资源,只有运行中必不可少的资源。
线程包含:一个指向当前被执行指令的指令指针、一个栈、一个寄存器的集合、一个私有的数据区。
线程的优点:
1、开销少,进程一般是线程的30倍的开销,
2、线程通信简单,因为一个进程下的多个线程是共享进程的所有的资源,所以操作简单
线程的缺点:
1、会有额外的CPU开销,因为在管理线程时,系统的使用会给系统带来上下文切换的额外负担。
2、等待使用这些共享资源会使程序的运行速度变慢
3、线程的死锁
4、对公有变量的同时的读或写,会出现数据被修改,而且当公用变量的读写操作是非原子时,不同的机器会导致数据操作产生错误。
适用场合:
1、各个任务必须等待外部资源时(如远程程序或Internet连接)
2、耗时或大量占用处理器的任务阻塞用户界面操作
注意:因为pthread的库不是Linux系统的库,所以在进行编译的时候要加上“-lpthread”.
线程的创建:
pthread_create()
功能:创建线程
头文件: #include <pthread.h>
原型:int pthread_create(pthread_t *thread,pthread_attr_t *atrr,(void *)(*start_routine)(void *),(voiid *)arg)
说明:thread:线程标识符
attr:线程的属性,一般为NULL
start_routine:线程的执行程序
arg:传递在执行函数的参数
返回值:成功,返回0;出错,返回<0,并输出错误代码
线程的退出:
pthread_exit()
功能:退出线程
头文件: #include <pthread.h>
原型:void pthread_exit(void *retval)
说明:retval:函数线程的返回指针
返回值:成功,返回0;失败,返回-1
线程的等待
pthread_join()
功能:阻塞调用的线程,直到指定的线程结束
头文件:#include <pthread.h>
原型:int pthread_join(pthread *thread,void **pthread_return)
说明:pthread_return:线程退出返回的指针
返回值:成功,返回0;错误,返回<0
线程的正常退出方法:
1、线程从启动例程中退出
2、被另一个进程退出
3、线程自己调用pthread_exit
在任一个线程中调用exit或_exit,整个进程都会终止
mutex互斥锁线程控制:
互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。
互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。
在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。
初始化:
pthread_mutex_init()
功能:初始化互斥锁
头文件:#include <pthread.h>
原型:int pthread_mutex_init(pthread_mutex_t *mutex,pthread_mutexattr_t *mutexattr)
说明:mutex:互斥锁
mutexattr:PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁
PTHREAD_RECUSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁
返回值:成功,返回0;出错,返回错误码
互斥锁线程控制:
功能:对互斥锁进行控制操作
头文件:#include <pthread.h>
函数:int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_destroy(pthread_mutex_t *mutex)
返回值:成功,返回0;失败,返回-1
- 线程复习的笔记
- 线程的学习笔记
- 线程的笔记
- 线程池和线程的选择--笔记
- Android的线程和线程池 --笔记
- Swing线程使用的笔记
- Java线程的同步笔记
- Structs2的线程安全 笔记
- Java线程的学习笔记
- 线程学习的简单笔记
- 理解线程池的笔记
- 关于线程安全的笔记
- Java线程学习笔记(二) 线程的异常捕捉
- C++自学笔记之多线程的创建与线程同步
- 学习笔记——JAVA线程<2>线程的状态
- 学习笔记——JAVA线程<3>线程的基本信息
- 学习笔记——JAVA线程<4>线程的同步
- 学习笔记——JAVA线程<5>线程的死锁
- 通过GC日志分析程序性能与内存泄漏
- javascript异常处理
- 数组、指针数组、数组指针、动态数组、数组作为函数参数
- 如何偷懒地用 PHP 搭建一个班级网站
- 【DFS】CODE[VS] 1535 封锁阳光大学(二分图DFS染色)
- 线程的笔记
- gulp使用技巧
- 旅行商人
- 云解析
- 161029
- 1056. Mice and Rice (25)解题报告
- 主机、虚拟机、开发板之间的互ping
- 分布式全文检索系统SolrCloud简介
- ubuntu16.04安装ibus中文输入法