如何使用互斥锁和/或cond vars同步2个pthread以创建“猜测数字”迷你游戏?

我正在尝试制作一个“猜数字”迷你游戏,以习惯于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。我应该如何正确,安全地实施此操作?

iCMS 回答:如何使用互斥锁和/或cond vars同步2个pthread以创建“猜测数字”迷你游戏?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2288907.html

大家都在问