gpt4 book ai didi

c - 信号量安全 shell C

转载 作者:行者123 更新时间:2023-11-30 19:43:56 25 4
gpt4 key购买 nike

嘿,大家好,我最近开始做,但我不太擅长使用信号量。我想做的是让一个进程显示数字(例如 1),另一个进程显示 2,然后切换回第一个进程显示 3,然后切换回第二个进程显示 4,依此类推......目前我能够显示 1 然后 2 然后 3 但不幸的是它返回到 1 而不是显示 4。如何让它显示 4 。请帮忙:)

//critical.c
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>

#include "se_sems.h"

int main(int argc, char argv[])
{
const int ONE_DONE = 0;
const int TWO_DONE = 1;
volatile int flag = ONE_DONE;


//Use our source file as the "key"
int id = se_semget("critical.c",1);

int pid = fork();
if (pid) {
//P1
while(1) {
flag = ONE_DONE;

se_wait(id);
printf("2222222222 \n");
printf("22222222222 \n");
fflush(stdout);
se_signal(id);

flag = TWO_DONE;
do {
sleep(1);
} while (flag == ONE_DONE);
printf("444444444444 \n");
printf("44444444444 \n");

se_signal(id);
}
} else {
//P2
while (1) {
flag = TWO_DONE;
se_wait(id);
printf("1111111 \n");
printf("1111111 \n");
fflush(stdout);
se_signal(id);

flag = ONE_DONE;
do {
sleep(1);
} while (flag == TWO_DONE);
printf("33333333 \n");
printf("3333333333 \n");
se_signal(id);
}
}
}

输出

1111111
1111111
2222222222
22222222222
33333333
3333333333
1111111
1111111
444444444444
44444444444
2222222222
22222222222
33333333
3333333333
1111111
1111111
444444444444
44444444444

等等:)

最佳答案

我发现最简单的方法是将最后一个显示留空,因此看起来就像按顺序显示一样。所以不,你不需要 2 个信号量。

关于c - 信号量安全 shell C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28953117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com