安卓网站开发平台,东莞seo推广,wordpress左侧导航菜单,网页模板之家线程基本概念: 线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程
1.线程创建: 线程独占栈空间,文本段、数据段和堆区与进程共享
2.线程调度: 与进程调度是一样的 宏观并行,微观串行
3.线程消亡:
与进程消亡是一样的
4.进程和线程…线程基本概念: 线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程
1.线程创建: 线程独占栈空间,文本段、数据段和堆区与进程共享
2.线程调度: 与进程调度是一样的 宏观并行,微观串行
3.线程消亡:
与进程消亡是一样的
4.进程和线程的区别: 进程是操作系统资源分配的最小单元 线程是CPU任务调度的最小单元
5.多进程和多线程的优缺点:
效率:多线程 多进程 多线程只需在同一进程空间内切换 多进程需要在不同的空间中切换
通信:多线程 有进程 线程共享全局变量,可以通过全局变量实现数据通信 进程空间是独立的没有共享空间通信实现比较复杂
安全:多进程 多线程 一个进程异常不会影响其余进程空间 一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均无法向下执行
6.线程相关的函数接口 创建: fork pthread_create 退出: exit pthread_exit 回收: wait pthread_join
1.pthread_create int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
功能: 在该进程中创建一个新的线程 参数: thread:存放线程ID空间首地址 attr:线程属性空间首地址 start_routine:线程要执行的函数的入口 arg:给线程函数的参数
返回值: 成功返回0 失败返回错误码
编译时加 -lpthread选项 2.pthread_self pthread_t pthread_self(void);
功能: 获得调用该函数线程的ID 3.pthread_exit void pthread_exit(void *retval); 功能: 让调用该函数的线程任务结束 参数: retval:线程结束的值 4.pthread_join int pthread_join(pthread_t thread, void **retval); 功能: 回收线程空间 参数: thread:线程的ID号 retval:存放线程结束状态空间的首地址 返回值: 成功返回0 失败返回错误码
7.线程分离属性: 线程结束后,自动回收线程空间
pthread_attr_init int pthread_attr_init(pthread_attr_t *attr);
功能: 线程属性初始化
pthread_attr_destroy int pthread_attr_destroy(pthread_attr_t *attr);
功能: 线程属性销毁
pthread_attr_setdetachstate int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
功能: 设置分离属性
PTHREAD_CREATE_DETACHED 分离属性 PTHREAD_CREATE_JOINABLE 加入属性默认
8.线程互斥
1.互斥锁:防止资源竞争 2.函数接口: pthread_mutex_init: int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
功能: 互斥锁初始化
参数: mutex:互斥锁空间首地址 attr:互斥锁的属性(默认为NULL)
返回值: 成功返回0 失败返回错误码
pthread_mutex_destroy: int pthread_mutex_destroy(pthread_mutex_t *mutex);
功能: 互斥锁销毁
参数: mutex:互斥锁空间首地址
返回值: 成功返回0 失败返回错误码
pthread_mutex_lock: int pthread_mutex_lock(pthread_mutex_t *mutex);
功能: 上锁
pthread_mutex_unlock: int pthread_mutex_unlock(pthread_mutex_t *mutex);
功能: 解锁
3.临界资源、临界区: 加锁解锁中间的代码称为临界资源、临界区 同一时刻临界资源不能同时执行,只能执行其中一个临界资源代码
4.原子操作: CPU最小的一次不能被任务调度打断的操作称为原子操作
5.互斥锁只能解决资源竞争的问题,无法同步代码(没有先后执行的顺序关系)
6.死锁: 多线程操作互斥锁,导致多个线程均无法向下执行的状态称为死锁状态简称为死锁 死锁产生的四个必要条件: 1.互斥条件 2.不可剥夺条件 3.请求保持 4.循环等待
避免产生死锁: 1.pthread_mutex_trylock 替代 pthread_mutex_lock 2.加锁顺序保持一致