进程并发与互斥性问题小结

来源:互联网 发布:北京时时彩计划数据 编辑:程序博客网 时间:2024/04/28 08:02

进程并发与互斥性问题小结

@(操作系统)

有朋友问到一个小问题,不太好直接私信回答,因为含有代码,格式不好调。写到这里作为参考。

明确几个小点:

  • 无论是不是有线程,进程都是分配资源的单位。
  • 有线程时,线程是调度的基本单位。
  • 进程内,可以共享全局变量(资源)。既然有共享资源,且线程是调度的基本单位,就意味着需要互斥访问,我们说临界资源需要加锁,或其他机制控制,就是保证资源某一时刻独占性使用。
  • 线程内的变量是私有的。

剩下的细节,在问题中解释。

(2016.30) 进程P1和进程P2均包含并发执行的线程,部分伪代码描述如下:

//进程P1int x = 0;Thread1(){    int a;    a = 1;    x+=1;}Thread2(){    int a;    a = 2;    x += 2;}//进程P2int x = 0Thread3(){    int a;    a = x;    x += 3;}Thread4(){    int b;    b = x;    x += 4;}

下列选项中,需要互斥执行的操作是:(C)
A. a = 1与a = 2
B. a = x与b = x
C. x += 1与x += 2
D. x += 1与x += 3

分析:注意到两个进程是独立分配资源的单位,那么格子进程的资源之间看做是不相关的即可。因此,D项,x += 1操作的是进程1自己的资源,x += 3操作的是进程2自己的资源。个人自扫门前雪,互相管不着。

线程具有相似性啊,不同线程之间的资源,也是自家的东西,私有财产,想怎么操作就怎么操作,互相管不着。比如a = 1,a = 2,a = x,b = x,爱怎么折腾怎么折腾,不必互斥。A,B妥妥的错。
除非,它们在操作共享的资源。比如进程1中的x对于线程1,2来说,就是共享资源,需要互斥访问。否则会导致数据不一致。所以线程1和线程2的对x的操作,就需要互斥访问。

2 0
原创粉丝点击