Я создаю файлы производителя и потребителя, используя семафоры для синхронизации. Я создал структуру, в которой я определяю переменные sem_t. Одной из переменных sem_t является мьютекс. Мьютекс выступает за взаимное исключение. Тем не менее, я получаю сообщение об ошибке, когда я компилирую свой код, говоря, что 'mutex' не объявлен. Это не делает с тех пор для меня, так как я думал, что я объявил это в структуре.
Я попытался инициализировать переменную значением 1 и использовать другие методы для использования переменной, например, sem_wait () и wait ().
#define BUFFER_SIZE 10
typedef struct{
int buffer[BUFFER_SIZE];
int in;
int out;
sem_t mutex;
sem_t cnt_filled;
sem_t cnt_empty;
} shm_structure;
/* pointer to shared memory object */
shm_structure *ptr;
ptr->in = ptr->out = 0;
fp = fopen("input.txt", "r");
//cnt_empty =
//mutex = 1;
do {
/* produce an item in next_produced */
while(((ptr-> in + 1) % BUFFER_SIZE) == ptr->out) {
; // do nothing
}
wait(cnt_empty);
wait(mutex);
if(fscanf(fp, "%d", &item) != EOF) {
ptr->buffer[ptr->in]= item;
printf("%s Read %d from the file\n", get_time(), item);
ptr->in = (ptr->in + 1) % BUFFER_SIZE; //increment tell the end of the file
} else {
break;
}
/* add next_produced into the buffer */
signal(mutex);
signal(cnt_filled);
//sem_post(mutex);
//sem_post(cnt_filled);
} while(1);
fclose(fp);
return 0;
Мой код не должен содержать ошибок при его компиляции. Это единственный результат, который я ищу в данный момент.