需要有一定的机制去维持一致性
比如上一节提到的有限缓冲区问题中,我们维护一个counter来记录缓冲区中item的个数,其中两个进程producer和customer分别需要执行counter++和counter--,但是这两种操作需要满足原子性(运行的时候不允许被中断),如果两个进程producer和customer都想要改变counter,就可能导致数据的不一致性
一个counter++的操作编译成汇编语言可能就是,counter--同理,区别是寄存器不同
123regiter1 = counter;register1 = register1 + 1;counter = register1;
一个神奇的题目:
12345678910111213有两个进程P1、P2,它们分别执行下面的程序体,其中total是两个进程都能访问的共享变量,初值为0(可理解为共享存储段中的存储单元),count是每个进程的私有变量。假设这两个进程并发执行,并可自由交叉(interleave),则这两个进程都执行完后,变量total可能得到的最小取值是A. 50 B. 1 C. 2 D. 3;P1: { int count; for ( count =1; count |