Аватар для Hunter9494
20 / 18 / 15
Регистрация: 29.10.2012
Сообщений: 157

Взаимоисключения с помощью "семафоров" для двух процессов, взаимодействующих через разделяемую память

13.03.2014, 10:02. Показов 2254. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
взаимоисключения с помощью семафоров для двух процессов, взаимодействующих через разделяемую память
здрасте)
у меня две программы с некорректной работой.
первая
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(new!=0){
        array[0] = 1;
        array[1] = 0;
        array[2] = 1;
    } else {
        array[0] += 1;
        for(i=0; i<1000000000L; i++); 
        array[2] += 1;
  printf("Program 1 was spawn %d times, 
        program 2 - %d times, total - %d times\n",
        array[0], array[1], array[2]);
    }
вторая
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(new!=0){
        array[0] = 0;
        array[1] = 1;
        array[2] = 1;
    } else {
        array[1] += 1;
        for(i=0; i<1000000000L; i++); 
        array[2] += 1;
  printf("Program 1 was spawn %d times, 
        program 2 - %d times, total - %d times\n",
        array[0], array[1], array[2]);
    }
они показывают сколько раз запустилась сама программа и кол-во запусков вместе.
для массива организована разделяемая память .
так вот если программы запускать одновременно кол-во запусков вместе не будет совпадать с кол-ством отдельных запусков.
для корректной работе я создал семафор s
после этого добавил в код несколько операции над семафорами

первая программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
Z(s)- пока s не 0 процесс блокируется// здесь код этой операции:))
А(s,1)- увеличил значение семафора S на величину 1 ;
if(new!=0){
        array[0] = 0;
        array[1] = 1;
        array[2] = 1;
    } else {
        array[1] += 1;
        for(i=0; i<1000000000L; i++); 
        array[2] += 1;
  printf("Program 1 was spawn %d times, 
        program 2 - %d times, total - %d times\n",
        array[0], array[1], array[2]);
    }
D(s,1)-пока значение семафора S < 1, процесс блокируется. Далее S = S - 1;
и так же для второй программы

я думал что при запуске например первой программы сначала значение семафора изменится на 1 потом программа установит значение array[] и после этого значение семафора снова станет 0 , то есть пока первая программа находиться в цикле вторая программа блокируется так как семафор равен 1
хотел бы узнать может ли работать такая программа ??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2014, 10:02
Ответы с готовыми решениями:

Взаимодействие 2-ух процессов через разделяемую память
Как получить из программы A доступ к файлу, отображаемому в адресное пространство с помощью программы B (mmap использован в программе B) ?...

Передача через разделяемую память
Подскажите как проще(правильнее) всего передать двумерный массив через разделяемую память. Вот получил я идентификатор разделяемой...

Передача матрицы через разделяемую память
Добрый день. Помогите, пожалуйста, не получается передать матрицу (динамический двумерный массив) с помощью разделяемой памяти через...

1
 Аватар для Hunter9494
20 / 18 / 15
Регистрация: 29.10.2012
Сообщений: 157
14.03.2014, 13:54  [ТС]
всем спасибо сам разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2014, 13:54
Помогаю со студенческими работами здесь

Передача данных через разделяемую память, сервер на C++ клиент на PHP
Здравствуйте коллеги! Помогите решить задачку: Есть сервер написанный на C++ и клиент написанный на PHP. Сервер записывает данные в...

Где почитать про разделяемую память для динамических библиотек
посоветуйте книгу или расскажите куда загружается образ динамической библиотеки. Тут меня интересует такое - пользовательский процесс не...

"Производитель-потребител" через разделяемую память
Всем привет Надеюсь остались еще добрые люди на белом свете) Очень горит одна лаба для автомата, но я не догоняю как ее сделать( ...

Использование процессов, каналов, событий и семафоров для реализации клиент-серверного приложения
Парни, прошу вашей помощи. Нужно получить зачет, осталась 1 лабораторная работа, которую я даже малейше не представляю как ее сделать. Тема...

Использование процессов, каналов, событий и семафоров для реализации клиент-серверного приложения
Парни, прошу вашей помощи. Нужно получить зачет, осталась 1 лабораторная работа, которую я даже малейше не представляю как ее сделать. Тема...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru