Скачиваний:
0
Добавлен:
15.04.2026
Размер:
83.36 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

ФАКУЛЬТЕТ ИНФОКОММУНИКАЦИОННЫХ СЕТЕЙ И СИСТЕМ (ИКСС)

КАФЕДРА ПРОГРАММНОЙ ИНЖЕНЕРИИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ (ПИ И ВТ)

ДИСЦИПЛИНА: «Операционные системы и сети»

Лабораторная работа №5.

Разработка многопроцессорной программы под Linux

Выполнил:

Цыганков М.А.

Козлов Н.С.

Тюришев М.А.

Подпись____________

Принял:

Дагаев А.В.

Подпись____________

«_____»________ 2021

Цель работы

Разработать программу, использующую несколько процессов и объекты синхронизации под Linux.

Постановка задачи

Написать две программы, одна из которых будет переводить семафор в сигнальное состояние (сделает его значение больше и равным 1), а вторая будет ждать перехода этого семафора в сигнальное состояние.

Демонстрация работы

Рис. 1 – 2 программа запущена, семафор в несигнальном состоянии

Рис. 2 – 1 программа запущена, семафор перешел в сигнальное состояние

Код программы

/*08-1a.c*/

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <stdio.h>

int main()

{

int semid;

char pathname[] = "08-1a.c";

key_t key;

struct sembuf mybuf;

if ((key = ftok(pathname, 0)) < 0) {

printf("Can\'t generate key\n");

exit(-1);

}

if ((semid = semget(key, 1, 0666 | IPC_CREAT)) < 0) {

printf("Can\'t get semid\n");

exit(-1);

}

mybuf.sem_op = 1;

mybuf.sem_flg = 0;

mybuf.sem_num = 0;

if (semop(semid, &mybuf, 1) < 0) {

printf("Can\'t wait for condition\n");

exit(-1);

}

printf("Condition is set\n");

return 0;

}

/*08-1b.c*/

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <stdio.h>

int main()

{

int semid;

char pathname[] = "08-1b.c";

key_t key;

struct sembuf mybuf;

if ((key = ftok(pathname, 0)) < 0) {

printf("Can\'t generate key\n");

exit(-1);

}

if ((semid = semget(key, 1, 0666 | IPC_CREAT)) < 0) {

printf("Can\'t get semid\n");

exit(-1);

}

mybuf.sem_op = -1;

mybuf.sem_flg = 0;

mybuf.sem_num = 0;

if (semop(semid, &mybuf, 1) < 0) {

printf("Can\'t wait for condition\n");

exit(-1);

}

printf("Condition is present\n");

return 0;

}

Соседние файлы в папке Лабы