举一个最最通俗的例子就是(也是大多数 *** 作系统教材的例子):生产者进程和消费者进程的问题。即:生产者将生产出来的产品放入一个消费缓冲区供消费者消费,但是在此过程中生产者进程必须要判断消费缓冲区是否已满?如果消费缓冲区已满,则生产者进程需要进行等待,不能够再将产品放入消费缓冲区;而消费者则是从消费缓冲区中取出产品用于消费,但是在此过程中消费者进程也必须要判断消费缓冲区是否已空?如果缓冲区已空,则消费者进程需要进行等待,不能够再从消费缓冲区取用产品进行消费。
它们之间的协调就必须要依靠进程之间的同步和互斥来解决。即:P、V *** 作。至于具体的P、V *** 作、以及对信号量 S 的 *** 作,那就需要仔细阅读相关的教材了。
请教一个Linux多进程访问动态库的互斥问题首先要了解并发。
并发进程间的关系可以是无关的,也可以是有交往的。并发进程间无关是指它们是各自独立的,即如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,不需要特别的控制;并发进程间有交往是指一个进程的执行可能影响其他进程的执行结果,即一个进程的执行依赖其他进程的进展情况。有交往的并发进程一定共享某些资源。
进程之间互相竞争某一个资源,这种关系就称为进程的互斥,也就是说对于某个系统资源,如果一个进程正在使用,其他的进程就必须等待其用完,不能同时使用。例如,A,B两个进程共享一台打印机,如果系统已经将打印机分配给了A进程,当B进程需要打印时因得不到打印机而阻塞,只有A进程将打印机释放后,系统才将B进程唤醒,B进程才有可能获得打印机。
并发进程使用共享资源时,除了竞争之外有协作,要利用互通消息的办法来控制执行速度,使相互协作的进程正确工作。进程之间的相互合作来完成某一任务,把这种关系称为进程的同步。例如(生产者和消费者)A,B两个进程通过一个缓冲区合作完成一项任务,A进程将数据送入缓冲区后通知B进程缓冲区中有数据,B进程从缓冲区中取走数据再通知A进程缓冲区现为空。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)