我被要求同步共享内存中共享整数的2个进程。同步将使用信号量完成。
第一个进程开始以2为单位从2向上递增整数2,当它应该阻塞因为整数是0 mod 5,允许第二个进程继续递增相同的整数但是这次为3,并且还停止当整数为0 mod 5时;然后它一直循环。直到100
我写了这段代码,我不确定能否成功写出V(s)和P(s)。
#define keys 100
#define key 200
main()
{
int s, idm, *n = 0;
idm = shmget(key, sizeof(int), ipc - creat | 0666);
creat - sem(keys);
init - sem(idm, 0, 0);
n = (int *)shmat(idm, 0, 0);
while (*n < 100)
{
*n += 2;
printf(% d, *n);
if (*n % 5 == 0)
{
V(s);
P(s);
}
shmdt(n);
}
#define keys 100
#define key 200
main()
{
int s, idm, *n = 0;
idm = shmget(key, sizeof(int), ipc - EXCL | 0666);
creat - sem(keys);
init - sem(idm, 0, 0);
n = (int *)shmat(idm, 0, 0);
P(s);
while (*n < 100)
{
*n += 3;
printf(% d, *n);
if (*n % 5 == 0)
{
V(s);
P(s);
}
shmdt(n);
smctl(idm, IPC - RMID, 0);
}