while(pid1 = fork()== -1);直接分号,循环语句为空

本文介绍了一个简单的多线程同步示例,通过一个全局布尔变量flag来协调两个线程A和B的操作流程。线程A负责修改flag的值,而线程B则依据flag的状态决定是否继续执行后续代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个一般是在多线程当中用的。
比如说线程A 在执行一系列操作之后对变量进行修改。
线程B 需要确定在执行下面的句子时某一变量是否已经满足了要求

比如说

一个程序有两个线程,全局变量
        bool flag = false;
线程A的代码如下:
{
        。。。//执行了一堆代码,可以将flag设置为true了

        flag = true;

}

线程B的代码如下:
{
        while (flag == false);//表示如果flag等于false的话,那么就一直陷在这个循环里,不许执行下面的代码

        。。。//需要在flag的值为true的情况下执行的代码。

}

应该是主程序,循环执行空指令,等待外部中断,进入中断处理子程序
/* * file simpleshell.c * brief 简易shell.可执行子进程 * * author Maqianyi * version 1.0.0 * date 7Aug25 * * history \arg 1.0.0, 7Aug25, Maqianyi, Create the file. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> /**************************************************************************************************/ /* DEFINES */ /**************************************************************************************************/ /*输入最大字符数个数*/ #define MAX_INPUT 256 /*输入最大命令个数*/ #define MAX_ARGS 10 /**************************************************************************************************/ /* TYPES */ /**************************************************************************************************/ /**************************************************************************************************/ /* EXTERN_PROTOTYPES */ /**************************************************************************************************/ /**************************************************************************************************/ /* LOCAL_PROTOTYPES */ /**************************************************************************************************/ /**************************************************************************************************/ /* VARIABLES */ /**************************************************************************************************/ /**************************************************************************************************/ /* FUNCTIONS */ /**************************************************************************************************/ int main() { char input[MAX_INPUT]; char* args[MAX_ARGS]; pid_t child_pid = -1; int status; int i = 0; char* token while (1) { printf("myshell> "); fflush(stdout); /*读取用户输入*/ if (fgets(input, MAX_INPUT, stdin) == NULL) { break; /*处理EOF*/ } /*去掉换行符*/ input[strcspn(input, "\n")] = '\0'; /*检查退出命令*/ if (strcmp(input, "exit") == 0) { if (child_pid != -1) { kill(child_pid, SIGTERM); /*终止子进程*/ waitpid(child_pid, &status, 0); } break; } /*检查stop命令*/ if (strcmp(input, "stop") == 0) { if (child_pid != -1) { kill(child_pid, SIGTERM); waitpid(child_pid, &status, 0); child_pid = -1; printf("Command process terminated\n"); } else { printf("No command running\n"); } continue; } /*解析命令和参数*/ token = strtok(input, " "); i = 0; while (NULL !=token && i < MAX_ARGS - 1) { args[i++] = token; token = strtok(NULL, " "); } args[i] = NULL; /*execvp要求以NULL结尾*/ /*创建子进程执行命令*/ child_pid = fork(); if (0 == child_pid) /*子进程*/ { execvp(args[0], args); /*如果execvp失败*/ perror("execvp"); exit(EXIT_FAILURE); } else if (child_pid > 0)/*父进程*/ { waitpid(child_pid, &status, 0); child_pid = -1; } else { perror("fork"); } } return 0; } 逐句解释以上语句
最新发布
08-08
In file included from threadtest.cc:1: thread.h:49:38: error: stray '\243' in program 49 Thread(char* name,int priority=50 000 thread.h:49:39: error: stray '\251' in program 49| Thread(char* name,int priority=50.... thread.h:49:40: error: stray '\243' in program 49| Thread(char* name,int priority=500● thread.h:49:41: error: stray '\273' in program 49| Thread(char* name,int priority=50000o thread.h:28:5: crror: 'List' does not name a type 28 List<Thread*>*children; ZpiNN thread.h:62:47: error: expected ')' before ';' token 62 void Fork(VoidFunctionPtr func, void *arg); thread.h:49:11: note: to match this '(' 49 Thread(char* name,int priority=5000.● thread.h:79:14: error: redeclaration of 'Thread::Priority Thread::priority' 79| Priority priority; thread.h:26:9: note: previous declaration 'int Thread::priority' 26| int priority; ~~~~~-~~ thread.h:52:5: error: expected ',' before'int' 52 int GetThreadID() const { return threadID; ) hass threadtest.cc: In function 'void FamilyTest()': threadtest.cc:4:26: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-st 41 Thread* root=new Thread("Root",50); threadtest.cc:5:2: error: 'currentThread' was not declared in this scope 51 currentThread->Yield(); threadtest.cc:6:28: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strin 6 Thread* childi=new Thread("Childi",60); threadtest.cc:7:28: warning: ISO C++ forbids converting a string constant to 'char** [-Wwrite-string 7| Thread* child2=new Thread("child2",30); threadtest.cc:8:8: crror: 'class Thread' has no member naned 'Fork' 81 root->Fork(SimpleThread,1); threadtest.cc:8:13: crror: 'SimpleThread' was not declared in this scope 8 root->Fork(StmpleThrend,1); Aatr threadtest.cc:9:10: error: 'class Thread' has no member named 'Fork
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值