现代操作系统基本都是多任务操作系统,即同一时候有大量可调度实体在执行。在多任务操作系统中,同一时候执行的多个任务可能:
- 都须要訪问/使用同一种资源
- 多个任务之间有依赖关系。某个任务的执行依赖于还有一个任务
这两种情形是多任务编程中遇到的最主要的问题,也是多任务编程中的核心问题,同步和相互排斥就是用于解决这两个问题的。
相互排斥:是指散步在不同任务之间的若干程序片断,当某个任务执行当中一个程序片段时,其他任务就不能执行它们之中的任一程序片段,仅仅能等到该任务执行完这个程序片段后才干够执行。最主要的场景就是:一个公共资源同一时刻仅仅能被一个进程或线程使用。多个进程或线程不能同一时候使用公共资源。
同步:是指散步在不同任务之间的若干程序片断。它们的执行必须严格依照规定的某种先后次序来执行,这样的先后次序依赖于要完毕的特定的任务。
最主要的场景就是:两个或两个以上的进程或线程在执行过程中协同步调,按预定的先后次序执行。
比方 A
任务的执行依赖于 B 任务产生的数据。
显然,同步是一种更为复杂的相互排斥,而相互排斥是一种特殊的同步。也就是说相互排斥是两个任务之间不能够同一时候执行,他们会相互排斥,必须等待一个线程执行完成。还有一个才干执行。而同步也是不能同一时候执行。但他是必需要安照某种次序来执行对应的线程(也是一种相互排斥)。因此相互排斥具有唯一性和排它性。但相互排斥并不限制任务的执行顺序,即任务是无序的,而同步的任务之间则有顺序关系。