1.线程相关概念
服务器有时需要大量并发大量进程响应客户端,如果用进程去响应,服务器需要分配大量资源,从而导致服务器的性能下降,从而提出了多线程的概念
多线程相关概念
1,线程是一个轻量级的进程
2,线程也是cpu调度的基本单位,但不是资源分配的基本单位
3,线程共享进程的资源(堆区,数据区,代码区,文件表,环境变量等),唯一不共享的是栈去,线程有自己的栈区
4,每一个进程都有一个主线程(main)线程都是由进程创建的,主线程结束,进程也随之结束,子线程也随之结束
5,线程微观是串行执行的,宏观是并行执行的
2线程创建
进程:fork()/vfork() 线程:pthread_create()
#include int pthread_create(pthread_t *thread,const *(*start_routine)(void*), void*restrict arg); Thread:接受线性号 Attr:接受线程的属性 一般NULL start_routine:线程处理函数 Arg:这个参数会传个线程处理函数 返回值:成功返回0 失败返回错误码 获取线程号:pthread_self() 编译多线程的时候需要加入动态库-lpthread pthread_attr_t*attr,void 3线程的等待与退出 进程exit() /_exit() wait() /waitpid() 线程pthread_exit() pthread_join() #include void pthread_exit(void *value_ptr); value_ptr:退出码 #include 返回值:成功返回0 失败返回错误码 4互斥锁 互斥锁是一种锁机制,一个线程在访问共享资源前加锁,其他线程在给共享资源加锁,加锁不成功,线程会发生阻塞,直到第一个线程解锁,才能加锁成功 1,使用互斥锁 1,定义互斥锁 Pthread_mutex_t mutex;//定义mutex锁 2,初始化锁 动态方式 Pthread_mutex_init() int pthread_mutex_init(pthread_mutex_t*mutex, const pthread_mutexattr_t *attr); Mutex:锁 Attr:互斥锁的属性,一般赋NULL 返回值:成功返回0失败返回错误码 静态方式 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 3,共享资源前加锁 Int Pthread_mutex_lock(pthread_mutex*mutex) 返回值,成功返回0失败返回错误码 Int Pthread_mutex_trylock(pthread_mutex_t*mutex) 尝试加锁,加锁不成功立即返回 4共享资源后解锁 Int Pthread_mutex_unlock(pthread_mutex_t*mutex) 5,销毁锁 Int Pthread_mutex_destroy(pthread_mutex_t*mutex) 练习:火车订票 共10张票,没创建一个线程,订一张票,当票数为0时,后来的线程订票失败 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务