gpt4 book ai didi

c - sleep 理发师算法 - 代码不执行

转载 作者:行者123 更新时间:2023-12-02 01:44:57 25 4
gpt4 key购买 nike

我在 10 分钟内完成了这个,并花了 2 个小时试图弄清楚为什么它不会在终端上做任何事情并最终放弃并需要帮助。如果有人能提供帮助,我们将不胜感激。谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

int main (int argc, char const *argv[])
{
int waitingRoomCust = 0;
srand(time(NULL));
int barber = fork();
printf("%d\n",barber);
if (barber==0) {
while(1) {
if(waitingRoomCust > 0) {
waitingRoomCust--;
sleep((rand() % 12));
printf("Customer has been given a haircut.");
}
}
}
if(barber!=0) {
while(1) {
if(waitingRoomCust <= 3) {
waitingRoomCust++;
printf("The waiting room has now %i customers.", waitingRoomCust);
}
else {
printf("Waiting room is full, customer has left.");
}
}
}
return 0;
}

最佳答案

等候室客满的速度太快了。

下面的过程没有停顿,很快就填满了stdout无休止的“等候室已满”。类似于if (barber==0) {

if(barber!=0) {
while(1) {
...
}
}

应检测失败fork() barber < 0/

// if(barber!=0) {
if (barber>0) {
...
}
if(barber<0) {
printf("failed %i ", barber);
}

需要共享内存。参见 https://stackoverflow.com/a/13274800/2410359

“工作”代码后跟各种调试打印。

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

static int *waitingRoomCust;

int main(int argc, char const *argv[]) {
waitingRoomCust = mmap(NULL, sizeof *waitingRoomCust, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);

*waitingRoomCust = 01;

//srand(time(NULL));
int barber = fork();
printf("%d\n", barber);
fflush(stdout);
if (barber == 0) {
while (1) {
if (*waitingRoomCust > 0) {
(*waitingRoomCust)--;
printf("Customer has been given a haircut.\n");
fflush(stdout);
sleep((rand() % 12));
} else {
printf("sleep %d\n", *waitingRoomCust);
fflush(stdout);
sleep(1);
}

}
}

if (barber > 0) {
while (1) {
sleep(7);
if (*waitingRoomCust <= 3) {
(*waitingRoomCust)++;
printf("The waiting room has now %i customers.\n", *waitingRoomCust);
fflush(stdout);
} else {
printf("Waiting room is full, customer has left.\n");
fflush(stdout);
}
}
}
if (barber < 0) {
printf("failed %i ", barber);
fflush(stdout);
}
return 0;
}

关于c - sleep 理发师算法 - 代码不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189637/

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