С помощью разделяемой памяти и семафоров стандарту POSIX реализовать проблему «Производитель-Потребитель» с прошлых заданий, представленнoй псевдокодом ниже. Вместо использования канала (pipeline), используйте N-элементный циклический буфер (т.е. после достижения конца буфера мы возвращаемся к его началу) помещенный в разделяемою память, где элементом буфера есть определенная фиксированная часть байтов. Доступ к общему буферу синхронизировать с помощью именованных семафоров (named semaphores) стандарту POSIX.
Буферные единицы товаров можно определить как двумерный массив и поместить его внутри структуры вместе с итераторами для "Производителя и Потребителя", например:
#define NELE 20 // Размер элемента буфера(еденицы товара) в байтах
#define NBUF 5 // Количество элементов буфера
// Сегмент разделяемой памяти typedef
struct {
char bufor[NBUF][NELE]; // Общий буфер данных
int to_put, to_take_out_of; // Позиции вставки и удаления из буфера
} SegmentPD;
Копируя область разделяемой памяти в адресное пространство виртуального процесса, должно быть сделано соответствующие проектирование типа, например:
SegmentPD *pointer = (SegmentPD *) mmap(NULL,sizeof(SegmentPD), PROT_READ,MAP_SHARED,des,0);
Затем, при использование так определенного указателя можна выполнять операции с этим сегментом, например:
pointer->to_take_out_of = (pointer->to_take_out_of + 1) % NBUF;
Для семафоров создайте свою собственную библиотеку функций для обработки разделяемой памяти.
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |