10/23
2014

进程&线程


  • 同步机制

    临界区(critical section)、互斥量(mutex)、信号量(semaphore)、事件(event)
    (1) 临界区:同一进程内,多线程之间的同步。通过对多线程的串行化来访问公共资源或一段代码。
    (2) 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才能访问公共资源。可以实现不同或者相同应用程序不同线程的资源共享。
    (3) 信号量:允许多个线程在同一时刻访问同一资源。
    PV操作:
    P操作申请资源:
    a. S减一
    b. 如果S减一后仍然大于等于0,则进程继续执行
    c. 否则进程被阻塞后进入该信号对应的队列中,转入进程调度
    V操作释放资源:
    a. S加一
    b. 如果S加一后仍然大于0,则进程继续执行
    c. 否则从该信号对应的等待队列中唤醒一个等待进程,然后返回原进程继续执行或转入进程调度
    (3) 事件:通过通知的方式来保持线程的同步。
    总结:
    互斥量,信号量,事件可以跨进程使用,而临界区只能在进程内部各线程间使用。

  • 进程通信

    进程间通信主要包括:管道,系统IPC(消息队列,信号量,共享内存),socket。
    (1)管道:分为有名管道和无名管道,无名管道可以用于父子进程之间的通信,有名管道可以用于无亲属关系的进程之间。
    (2)消息队列:用于同一台机器上的进程通信,与管道类似。
    (3)共享内存:一个进程创建,其余进程对这块内存进行读写。
    (4)信号量:同上
    (5)套接字:基于TCP/IP协议栈,可用于不同机器不同进程之间的通信

  • 多进程和多线程

    进程是资源分配的最小单位,线程是CPU调度的最小单位。进程编程调试简答可靠性高但是创建开销大,线程正好相反,开销小,切换速度快,但是编程调试较为复杂。

  • 死锁

    deallocks是指两个或两个以上的进程(线程)在执行过程中,因为抢夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
    产生死锁的四个必要条件:
    a. 互斥条件:一个资源每次只能被一个进程(线程)使用。
    b. 请求与保持条件:一个进程(线程)因请求资源而阻塞时,对已获得的资源保持不放。
    c. 不可剥夺条件: 次进程(线程)已获得的资源没在未使用完之前,不能强行剥夺。
    d. 循环等待条件: 多个进程(线程)之间形成一种头尾相接的循环等待资源关系。
    死锁的预防:
    因为资源必须互斥的方式进行访问,所以必须从后面三个条件下手。
    a. 破坏占有并等待条件:
    要求每个进程必须一次性的请求他们所有需要的所有资源,无法获取就等待,知道满足为止。也可以采用事务机制,确保可以回滚,即把获取和释放资源做成原子性的。
    b. 破坏不可剥夺条件:
    一个已占有资源的进程若要在申请新的资源,必须先释放已占有的资源。
    c. 破坏循环等待条件:
    将所有的资源设置标志位,排序,规定所有的进程申请资源必须以一定的顺序做操作。
    例如:哲学家就餐问题

blog comments powered by Disqus