1.什么是线程
线程是轻量级进程。
多线程优点:线程之间除了栈区的内容其他都是共享的
缺点:互斥和同步
pthread_create()
什么时候选择用多线程,什么时候多进程
1创建和销毁较频繁使用线程,因为创建进程花销大。
2需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。
3安全稳定选进程;快速频繁选线程
线程相关函数
pthread_create()
参数1:pthread_t* 参数2:线程的属性一般设置为NULL
参数3:函数的指针 void*(void*)
参数4:主线程给子线程传值,设置为NULL
编译时还需要链接pthread库
-pthread
等待子线程结束
pthread_join()
参数1:pthread_t
参数2:子线程给主线程传值 NULL
3.线程退出
1.主动退出
pthread_exit(void *retval); 参数为NULL,表示该线程退出不带出来值
线程中需要解决的问题
1.互斥
多线程不允许同时访问临界资源
解决方法:
1.互斥锁的作用
引入互斥锁的目的是用来保证共享数据操作的完整性。
互斥锁主要用来保护临界资源
每个临界资源都由一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源。
线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止
初始化互斥锁
pthread_mutex_init()
参数1:互斥锁
返回值
成功:0
出错:-1
申请互斥锁
pthread_mutex_lock()
参数:mutex:互斥锁
释放互斥锁
pthread_mutex_unlock()
函数参数:mutex:互斥锁
返回值:
成功:0
出错:-1
同步
多线程在访问临界资源时,按照一定的操作顺序来访问
信号量:
有名信号量:多进程实现同步
无名信号量:多线程同步
信号灯集:多进程实现同步
1.信号量的引用
信号量代表某一类资源,其值表示系统中该资源的数量,信号量的值为非负整数,它被用来控制对公共资源的访问。
信号量是一个受保护的变量,只能通过三种操作来访问
P操作(申请资源)-1 sem_wait() sem_trywait()
V操作(释放资源)+1 sem_post()
1.有名管道特点:
1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到。
2.半双工的通信方式,进程通过文件IO来操作有名管道。
3.有名管道遵循先进先出原则,不支持lseek()
原文地址:https://www.jb51.cc/wenti/3279807.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。