如果在共享内存中有并发的操作,即多个进程同时往同一块共享内存写东西,就会出错,例如两个并发进程,同时操作共享内存(往其写),会在中途出错。详见
现在就用信号量来保护共享内存,这里为p,确保其结果为20000000
信号量(相当于一个红绿灯) 通过这个灯来保护共享资源(让其它人操作不了)
级别:
cpu ,寄存器,一级缓存,二级缓存(缓存相当于高级ram,只是放在cpu里边,其存取速度比ram更快),内存,磁盘
原语:即原子操作(例如二进制开关),操作系统不能被其它指令打断的一次操作
删除对应id的信号量集合:ipcrm -s semid
为了获得共享资源进程需要执行下列操作:
(1
)测试控制该资源的信号
量
。(首先要有个信号量,即信号灯,信号量实际上也有系统维护的资源,有0和1,相当于红绿灯)
(2
)若信号
量
的值为正,则进程可以使用该资源。进程信号
量
值减1
,表示它使用了一个资源单位。此进程使用完共享资源后对应的信号
量
会加1
。以便其他进程使用。
信号量只能设置一次
1 使用就减1
0 使用完就加1
(3
)若信号
量
的值为0
,则进程进入休息状态,直至信号