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返回信号量地址