7月8日笔记-进程、线程
2015年07月08日
学习内容出自:一步步学习Linux多任务编程
- 多任务的同步与互斥
多任务编程遇到的最基本问题:
都需要访问、使用同一个资源
多个任务之间有依赖关系(某个任务运行依赖于另一个任务)
区别:互斥具有唯一性和排他性,而同步的任务之间有顺序关系
互斥锁的基本操作:初始化互斥琐,申请互斥锁,释放互斥锁,非阻塞申请互斥锁,销毁互斥锁
互斥锁的操作流程
1、在访问共享资源前对互斥锁进行加锁
2、在访问完成后释放互斥锁上的锁
3、对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放
- 读写锁
特点:
1、如果有某线程读数据,则允许其它线程执行读操作,但不允许写操作
2、在果有某线程写数据,则其它线程都不允许读、写操作
申请规则
1、若有某线程申请读琐,其它线程可再申请读琐,但不能申请写锁
2、若有某线程申请写琐,其它线程不能申请读琐,也不能申请写锁
申请读锁:申请几次读琐就要解锁几次
- POSIX无名信号量
信号量:本质是一个非负的整数计数器 >0时可以访问公共资源 P操作减1,V操作加1
无名信号量:用于线程间同步或互斥
有名信号量:用于进程间同步或互斥
信号P操作:int sem_wait(sem_t *sem);
注:操作前,先检查信号量sem的值是否为0,若为0,此函数会阻塞,直到信号量大于0时才进行减1操作
- POSIX有名信号量
有名信号量默认放在/dev/shm
里
*sem_open
返回信号量地址