割り当てがあり、行き詰まっており、どこに問題があるのか わかりませんが、1つのスレッドを使用してファイルから2つの数値を取得し、その数値を画面に出力し、別のスレッドがそれらに2つの数値を追加して、それらを画面に印刷します。これが私がこれまでに持っているものですが、適切に機能させることができないようです。どんな助けでも大歓迎です。 指摘しておきたいのは、ミューテックスとセマフォを使用せずにこれを行う必要があるということです。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
typedef struct
{
int a;
int b;
} pair_t;
FILE *f;
static void * reader(void *data){
pair_t *d = (pair_t *)data;
sigset_t catch;
int flag;
sigemptyset(&catch);
sigaddset(&catch, SIGUSR1);
while(!feof(f)){
sigwait(&catch, &flag);
fscanf(f,"%d", &d->a);
fscanf(f,"%d", &d->b);
printf("Thread 1 submitting : %d %d", d->a, d->b);
sleep(5);
}
return 0;
}
static void * calculator(void *data){
pair_t *pa = (pair_t *)data;
sigset_t catch;
sigemptyset(&catch);
sigaddset(&catch, SIGUSR1);
int flag;
while(1){
sigwait(&catch, &flag);
printf("Thread 2 calculated = %d\n",(pa->a + pa->b));
sleep(5);
}
return 0;
}
int main(int argc, char *argv[]){
f = fopen(argv[1],"r");
if(f ==NULL){
perror;
}
if(f !=NULL){
pair_t * p;
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
pthread_t t1;
pthread_t t2;
pthread_sigmask(SIG_BLOCK, &set, NULL);
pthread_create(&t1, NULL, reader, (void *)&p);
pthread_create(&t2, NULL, calculator, (void *)&p);
pthread_join(t1, NULL);
printf("Goodbye from Thread One");
pthread_join(t2, NULL);
printf("Goodbye from Thread Two");
pthread_exit(NULL);
}
return 0;
}