gpt4 book ai didi

检查线程结束条件

转载 作者:太空宇宙 更新时间:2023-11-04 11:18:13 25 4
gpt4 key购买 nike

我有一个包含 2 个线程的进程。如果 2 个线程中的一个完成了他的指令的执行,那么另一个线程也应该停止。该过程应该结束。如何检查其中一个线程是否已完成执行指令?这是我到目前为止编写的代码。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int read = 0;
int timeLeft = 0;

void *readFromFile(void *myFile){
char *theFile;
theFile = (char*) myFile;
char question[100];
char answer[100];
FILE *file = fopen(theFile, "r");
if(file != NULL){
while(fgets(question,sizeof question,file) != NULL){
fputs(question, stdout);
scanf("%s", &answer);
}
read = 1;
fclose(file);
printf("Done with questions!\n");
pthread_exit(
}
else{
perror(theFile);
}
}

void displayTimeLeft(void *arg){
int *time;
time = (int*) arg;
int i;
for(i = time; i >= 0; i -= 60){
if( i / 60 != 0){
printf("You have %d %s left.\n", i/60,(i/60>1)?"minutes":"minute");
sleep(60);
}
else{
timeLeft = 1;
printf("The time is over \n");
break;
}
}
}


int main(){

pthread_t thread1;
pthread_t thread2;
char *file = "/home/osystems01/laura/test";
int *time = 180;
int ret1;
int ret2;
ret1 = pthread_create(&thread1, NULL, readFromFile,&file);
ret2 = pthread_create(&thread2, NULL, displayTimeLeft,&time);


printf("Main function after pthread_create");



while(1){
//pthread_join(thread1,NULL);
//pthread_join(thread2,NULL);


if(read == 1){

pthread_cancel(thread2);
pthread_cancel(thread1);
break;
}
else if(timeLeft == 0){

pthread_cancel(thread1);
pthread_cancel(thread2);
break;
}

}
printf("After the while loop!\n");
return 0;

}

最佳答案

您可以声明一个全局标志变量并将其初始设置为 false。每当线程到达其最后一条语句时,它会将标志设置为 true。每当一个线程开始执行时,它会首先检查标志值,如果它为假,即没有其他线程更新它继续执行,否则从函数返回

关于检查线程结束条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888387/

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