Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 03.12.2009
Сообщений: 8

Системное программирование win, семафор

14.12.2012, 17:29. Показов 1441. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с задачей, уже неделю над ней бьюсь:
На железнодорожной станции четыре пути (разделяемые ресурсы), на
каждом из которых может остановиться только один поезд (поток). Когда
поезд прибывает на станцию, то он занимает тот путь, который на данный
момент свободен, останавливается там на определённое время, а затем
отправляется дальше. Если все пути заняты, то поезд останавливается на
подъезде к станции и ожидает освобождения одного из путей.
Если в ожидании освобождения путей находятся несколько поездов, то
они занимают освобождающиеся пути в порядке приезда на станцию. Поезда
прибывают на станцию через произвольные промежутки времени.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «семафор».
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2012, 17:29
Ответы с готовыми решениями:

Системное программирование (Побегайло): ошибка в коде или влияние извне?
Не понятно, в чем заключается причина ругани VS на попытку исполнения кода 4.8(Завершение потока в родительском процессе, который...

Программа из книги (Харт Джонсон | Системное программирование в среде Windows)
Программа для обработки ошибок. Рабочая программа, только не могу понять почему из функции выводит кракозябрами. Как добиться того, чтобы...

Анонимные каналы "Системное программирование в Windows" (А. Побегайло)
Здравствуйте. Читаю книгу "Системное программирование в Windows" (А. Побегайло). Добрался до 15 главы "Работа с анонимными...

3
0 / 0 / 0
Регистрация: 03.12.2009
Сообщений: 8
16.12.2012, 10:19  [ТС]
никто не знает?(
0
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
17.12.2012, 02:47
набросал как понял, на исключительную правильность не претендую
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <windows.h>
using namespace std;
 
HANDLE hSem, hMutex1;
HANDLE *hObj;
DWORD *dwThreadID;
int capThread;
int way[4];        //массив - 4 пути
int count=0, count2=0, t0=0;
 
int Clock() 
{
    return GetTickCount() - t0;
}
 
DWORD WINAPI Thread (PVOID pvParam) {
    int numTrain=((int)pvParam);
    int numWay = 0;
    int timeInput = 0;
    int timeOutput = 0;
    while (count2<3) 
    {
        WaitForSingleObject (hSem, INFINITE);     // семафор перед "въездом на станцию"
        
        timeInput=Clock();           //въехали, запоминаем время прибытия поезда
        
        way[count]=numTrain;     //занимаем свободный путь - пишем в свободную ячейку номер потока (поезда)
        count++;                       //меняем номер свободного пути
        numWay=count-1;
        if (count==4)
        {
            count=0;               //если счетчик дошел до 4, значит все пути заняты, семафор больше никого не пропустит. потому обнуляем 
            count2++;
        }
        Sleep(400);                    //поезд задерживается на станции
 
        WaitForSingleObject (hMutex1, INFINITE);  //мютексы - для синхронизации вывода
        cout<<"Way #"<<numWay<<" busy by train #"<< numTrain<<". Time of arrival "<<timeInput<<endl;
        ReleaseMutex(hMutex1);
 
        timeOutput=Clock();
 
        ReleaseSemaphore(hSem, 1, NULL);   //выезд со станции
 
        WaitForSingleObject (hMutex1, INFINITE);
        cout<<"Way #"<<numWay<<" released by train #"<< numTrain<<". Time of departure "<<timeOutput<<endl;
        ReleaseMutex(hMutex1);
        
    }
    return 0;
}
 
int main()
{
    cout<<"Trains(threads): ";
    cin>>capThread; //вводим число поездов
 
    hSem = CreateSemaphore(NULL,4,4,NULL);
    hMutex1=CreateMutex(NULL, FALSE, NULL);
    hObj=new HANDLE [capThread];
    dwThreadID=new DWORD [capThread];
 
    t0 = GetTickCount();  //время начала движения поездов
 
    for (int i=0; i<capThread; i++) {
        hObj[i]=CreateThread(NULL, 0, Thread, (PVOID)i, 0, &dwThreadID[i]); //создаем в цикле потоки (поезда)
    }
 
    WaitForMultipleObjects (capThread, hObj, TRUE, INFINITE); //ждем пока все потоки не завершатся
 
    delete[] hObj;
    delete[] dwThreadID;
 
    cout<<"\n\rThe end!!!\n\r";
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от novi4ek_
Описанный процесс происходит бесконечно.
у меня как видишь нет. пока cout2<>0.
1
0 / 0 / 0
Регистрация: 03.12.2009
Сообщений: 8
17.12.2012, 04:58  [ТС]
Цитата Сообщение от fit Посмотреть сообщение
набросал как понял, на исключительную правильность не претендую


у меня как видишь нет. пока cout2<>0.
Спасибо!!! Дальше сам постараюсь разобраться!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2012, 04:58
Помогаю со студенческими работами здесь

Программирование на Win API
помогите пожалуйста создать прогу Текстовый редактор с цветной подсветкой с использованием функции RichEdit задали на курсовой проект...

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я вступаю во взрослую жизнь и давно...

Системное программирование
Всем привет. Где можно найти все ф-ий по С и их краткое описание под Линукс. Что то похожее на man . Подскажите пожалуйста, может...

Системное программирование
Давно интересует меня такой вопрос, имею книгу &quot;Системное программирование в Windows&quot; (автор Александр Побегайло). Хотелось бы...

Системное программирование
Добрый день! Начала изучать системное программирование, но не могу нигде найти простенькие задачи по нему. Подскажите, пожалуйста, задачи,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru