linux多线程编程
linux线程介绍
进程与线程的区别
1 进程是资源分配的单元,创建进程时系统需要分配内存资源,而线程是资源调度的单元,共享进程中的地址空间,创建线程不会有新的开销.
2.执行效率不同.线程的执行效率高,进程执行效率低,因为减少了地址切换的开销
3.健壮性不同:多进程健壮性比多线程好一点,因为多线程中其中一个线程崩了进程就崩了,而多进程中一个进程崩了不影响其他进程
4.通讯方式不同
进程:管道 消息队列 信号量 socket 共享内存
线程:互斥锁 信号量 条件变量 信号
使用线程的理由
1 节约资源,切换效率快
2.通信更加方便
线程demo
1.创建线程pthread_create(ID,线程属性(一般NULL),调用函数,函数参数传递)
需要传递多个参数是通过创建结构体来实现
2线程退出pthread_exit(void *)
*退出变量必须加static关键字或者为NULL
3线程等待pthread_join(ID,void **)
互斥锁
括号里mutex改为* mutex
互斥锁的使用
互斥锁的作用
保证进入锁后运行完锁住的代码在退出,并不能保证先后顺序,例如有三个线程上锁,一个线程运行完后,其他两个线程会竞争这把锁.
什么是死锁?
产生死锁的情境
产生死锁的条件
1.一个锁同一时刻只能被一个线程拿到
2.拿到后是不会放开的
3.拿到后也不会被其他线程锁剥夺
4.死锁后陷入循环
条件变量