1.命令:
ipcs -q //查看当前存在的消息队列
ipcs -m //查看当前存在的共享内存块
ipcs -s //查看当前存在的信号量数组
ipcrm -q msqid //删除当前存在的消息队列
ipcrm -m shmid //删除当前存在的共享内存块
ipcrm -s semid //删除当前存在的信号量数组
2.同步与互斥
信号量:不要求忙等的同步互斥工具。
一种信号量表示一种资源,信号量的值表示可用资源的个数。
做法:
当资源不可用时,进程将阻塞(避免忙等)(加入阻塞队列),直到另一进程释放资源时才被唤醒。
信号量s只能被下面的两个原语访问:
#semWait(s) 也称作P(s)操作,wait(s) ——本进程请求分配一个资源
#semSignal(s) 也称作V(s)操作,signal(s) ——本进程释放一个资源
注意: P、V操作必须成对出现。 ·
1.用于互斥时,位于同一进程内,临界区前后;
2.用于同步时,交错出现于两个合作进程内;
3.多个P、V操作的次数不能颠倒,否则可能导致死锁;
4.用于同步的P操作应出现在用于互斥的V操作之前;
5.多个V操作操作的次序可任意。
#用于互斥时,s的初值为1,取指为1~(n-1)。
s=1时:有一个临界资源可用,一个进程可进入临界区。
s=0时:临界资源已分配,一个进程已进入临界区。
s<0时:临界区已被占用,|s|个阻塞进程正在等待进入。
#用于同步时,s初值将>=0
s>=0:可用资源个数(或可进入临界区的进程个数)。
s<0 : 该资源的等待队列长度(阻塞进程个数)。
#强信号量:唤醒一个阻塞进程并移出阻塞队列时,采用FIFO移出策略的信号量。
#弱信号量:唤醒一个阻塞进程并移出阻塞队列时,采用随机选择移出策略的信号量。
3.生产者消费者原理
一个生产者进程和一个消费者进程共用一个有sizeof(buffer)个字节缓冲区的缓冲池来交换数据(有限缓冲)。
缓冲池一次只能让一个进程访问。(互斥) 设一信号量s,初值为1;
生产者需要空缓冲来发送数据。(同步) 设一信号量empty,初值为sizeofbuffer;
消费者需要满缓冲来获取数据。(同步) 设一信号量full,初值为0;