网站与微信对接,申请商标,搜索引擎环境优化,做一家公司网站要注意哪些线程#xff1a;轻量级的进程#xff0c;线程的栈区独立#xff08;8M#xff09;#xff0c;与同一进程中的其他线程共用进程的堆区#xff0c;数据区#xff0c;文本区。
进程是操作系统资源分配的最小单位#xff1b;线程是cpu任务调度的最小单位。
1. 线程的创建…线程轻量级的进程线程的栈区独立8M与同一进程中的其他线程共用进程的堆区数据区文本区。
进程是操作系统资源分配的最小单位线程是cpu任务调度的最小单位。
1. 线程的创建线程由所属的进程创建进程为其分配独立的栈区空间堆区数据区文本区与其他线程和所在进程共享。
2. 线程调度宏观并行 微观串行。
3. 线程的消亡1线程退出2 回收线程资源
进程与线程的区别
正在执行的程序 轻量级进程。线程一定属于进程。与同一进程中的其他线程共用进程的堆区数据区文本区
进程是操作系统资源分配的最小单位 线程是cpu任务调度的最小单位。
资源消耗进程消耗的资源空间大 线程消耗的资源空间小只需分配栈区空间
效率角度创建线程比创建进程效率高任务切换跨进程效率低于跨线程
安全角度由于进程空间独立所以安全性比线程高。
通信角度进程间不能直接通信需要使用进程间通信方式IPC实现线程可以直接通信比如全局变量 创建线程 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 功能创建一个线程 参数 thread 保存线程ID的变量地址 attr线程属性 默认属性NULL void *(*start_routine) (void *) 线程任务处理函数 arg传递给任务处理函数的参数
返回值成功0失败非0
pthread_self()获取当前线程的id号
线程间通信1. 全局变量2. pthread_create传参的方式
2. 线程退出及资源回收 1退出 1在线程任务中调用return 2在线程任务pthread_exit 2回收 int pthread_join(pthread_t thread, void **retval); 功能阻塞回收线程的资源, 状态 参数 thread需要回收的线程ID retval保存线程退出时的状态比如return 返回的内容地址 返回值成功0
这里插一下在此能被返回的指针类型 线程非分离属性能被pthread_join回收或者能被其他线程结束的线程称为具有非分离属性的线程。
线程分离属性不需要回收或者执行结束会被系统回收的线程称为分离属性的线程。
直接设置分离属性使用pthread_detach(pthread_t tid);
也可以这么设置
1. 定义一个线程属性对象pthread_attr_t
2. 初始化线程属性对象pthread_attr_init();
3. 设置线程的分离属性pthread_attr_setdetachstate();
4. 以分离属性创建线程pthread_create();
5. 销毁属性对象pthread_attr_destroy(); 线程的互斥
原因多个线程在访问读、写临界资源时存在资源竞争。临界资源多个线程能够同时操作的资源比如全局变量临界变量
解决方法让多个线程访问临界资源时同一时刻只允许一个线程访问排他性访问即互斥
互斥锁避免多线程的资源竞争保护临界资源
1. 创建一个互斥锁对象pthread_mutex_t
2. 初始化互斥锁pthread_mutex_init();
3. 加锁pthread_mutex_lock(); 阻塞等待锁资源
4. 解锁pthread_mutex_unlock();
5. 销毁锁pthread_mutex_destroy(); 线程间同步让多个任务在执行某部分程序时按照先后顺序执行。以同步方式访问临界资源具备互斥的效果同步实现依赖于信号量资源数。 步骤
1. 创建信号量对象sem_t
2. 初始化信号量sem_init(); int sem_init(sem_t *sem, int pshared, unsigned int value); 功能初始化信号量 参数 sem信号量对象 pshared 0---》线程间非0--》进程间 value信号量初始化资源数。
3. 申请信号量(P操作)sem_wait();
4. 释放信号量(V操作)sem_post();
5. 销毁信号量sem_destroy();