Почему ошибка 'undeclared mutex' появляется, когда она объявлена ​​в struct? - PullRequest
0 голосов
/ 02 апреля 2019

Я создаю файлы производителя и потребителя, используя семафоры для синхронизации. Я создал структуру, в которой я определяю переменные 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;

Мой код не должен содержать ошибок при его компиляции. Это единственный результат, который я ищу в данный момент.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Когда вы объявляете структуру, вы определяете совокупный тип данных.Теперь вам нужно создать экземпляр этой структуры, а затем вы можете получить доступ к членам структуры.Для базового примера использования членов структуры:

typedef struct{
    int x;
    int y;
} my_struct;

my_struct my_instance_of_struct;
my_instance_of_struct.x = 1;
0 голосов
/ 02 апреля 2019
    signal(mutex);

Вы получаете здесь ошибку, потому что mutex не объявлено.Скорее вы должны сделать shm_structure.mutex.

...