我正在尝试制作一个“猜数字”迷你游戏,以习惯于pthread和同步。一个线程休眠10秒钟,另一个线程读取输入,并说该数字太大还是太小。当第一个线程“唤醒”时,第二个线程将不再读取输入,无论它是否正在执行scanf。当第二个线程读取了正确的数字后,第一个线程应该不再处于休眠状态,而忽略其其余代码。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t mutex = pthREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = pthREAD_COND_INITIALIZER;
unsigned short quit = 0;
unsigned short won = 0;
void * engine(void * arg);
void * arbiter();
int main(int argc,char** argv) {
int n = rand() % 100;
pthread_t t1,t2;
pthread_create(&t1,NULL,arbiter,NULL);
pthread_create(&t2,engine,&n);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return (EXIT_SUCCESS);
}
void * arbiter(){
sleep(10);
quit = 1;
printf("Stop!\n");
}
void * engine(void * arg){
int n = *(int*)arg;
printf("%d\n",n);
while(!quit){
printf("N = ");
int a;
scanf("%d",&a);
if(a < n){
printf("Go higher!\n");
} else if(a > n){
printf("Go lower!\n");
} else{
printf("Bingo!\n");
won = 1;
}
}
}
我不知道如何在这里使用互斥或cond var来使线程协同工作。现在,当第一个线程唤醒时,第二个线程将执行最后一个scanf。我应该如何正确,安全地实施此操作?