一、同步和互斥----实现对临界资源的控制
互斥是同步的一个子集。
互斥:通过互斥锁来实现某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
s=1;
p(s) //s-1
printf();
v(s) //s+1
通过p v 操作来是实现对 写资源 的独占。 互斥和同步最简单的不同就是 互斥的 s 通常只有一个 且 为 0/1
同步:通过信号量机制来实现 通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
s1=1;s2=0;s3=0;
p(s1) //s1-1 p(s2) //s2-1 p(s3) //s3-1
printf(A); printf(B); printf(C);
v(s2) //s2+1 v(s3) //s3+1 v(s1) //s1+1
通过对 s1,s2,s3的改变 实现了 顺序 对ABC的打印。
二.同步和异步
线程:
同步是指:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。
异步是指:当程序1调用程序2时,程序1径自继续自己的下一个动作,不受程序2的的影响。
通信:
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。—
同步:
A进程依赖于B进程。
A进程向B进程发出一个请求,必须等待B进程返回一个信号。在等待过程中A进程会被阻塞不再执行,一直到信号量返回后,A进程才会被执行。 -----同步阻塞
A进程向B进程发出一个信号,等待B进程返回一个信号。A进程会一直执行,但会不断的向B发送信号,直到返回信号为止。
异步非阻塞:
A进程向B进程发出一个信号,等待B进程返回一个信号。A进程会一直执行,如果B程序返回信号,则去处理,否则,继续执行。