Семафоры и общая память - PullRequest
       314

Семафоры и общая память

0 голосов
/ 20 июня 2011

У меня есть вопрос, касающийся многопроцессорного программирования на C, у меня есть несколько процессов чтения, которые будут считывать из файла в общий буфер, и несколько процессов записи, читающих из буфера и в другой файл, какие типы семафоров нам понадобятсяиспользовать для этого.и как мы можем использовать разделяемую память с семафорами.

1 Ответ

1 голос
/ 20 июня 2011

Если вы используете Linux, одним из простых вариантов является использование pshared mutexes и условных переменных. Необходима версия glibc. По существу, внутри вашего сегмента общей памяти у вас будет что-то вроде:

struct shmem_head {
    pthread_mutex_t mutex;
};

Для инициализации:

void init_shmem_head(struct shmem_head *head)
{
    pthread_mutexattr_t attr;
    pthread_mutexattr_init(&attr);
    pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED );

    pthread_mutex_init(&head->mutex, &attr);
    pthread_mutexattr_destroy(&head->mutex);
}

Теперь у вас есть мьютекс, общий для всех процессов с открытым сегментом общей памяти. Вы можете просто использовать pthread_mutex_lock для блокировки и pthread_mutex_unlock для разблокировки как обычно. Существует также аналогичный pthread_condattr_setpshared, если вы также хотите условные переменные.

...