操作系统 进程同步和通信
死锁:进程间争夺资源而相互等待,以至于进程无法运行
并发执行的实现
并发编程方法
要想让任务中的并发成分能够并发执行,通常有如下三种方法:
- 编写顺序程序,系统来识别顺序程序的并发成分,利用操作系统支持的进程机制分发这些任务
- 由程序员识别并发成分,利用并发程序设计语言编写设计并发的程序,在编译时由编译系统安排创建相应的一组进程
- 程序员识别并发,利用操作系统的进程机制提供的系统调用的并行库函数生成进程并运行并发子任务。c语言不是并发编程语言,需要使用此方法。
并发执行的实现
并发执行的实现还 依赖操作系统的进程或线程机制。
操作系统提供进程或线程创建、结束和同步等系统调用,用来支持并发程序的执行。
UNIX中支持并发执行,与进程相关的几个系统调用:
- fork(): 创建一个新的进程,该系统调用执行完成后,系统就创建了一个子进程,子进程进程映像的程序区、数据区和栈区按如下规则生成:该子进程继承父进程的程序空间,复制父进程的数据区和栈区。
- exit(status):结束进程
- wait(&status):等待子进程结束
- waitpid(pid …):等待指定的进程结束
进程的同步与互斥
进程之间的制约关系:
- 同步关系:直接制约关系,指为完成用户任务的伙伴进程间,因为