4 / 4 / 2
Регистрация: 20.09.2010
Сообщений: 102
1

Критическая секция и семафоры

02.03.2011, 20:11. Показов 1691. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Посмотрите пожалуйста правильно ли я сделал программу. Нужно было написать программу, в которой при помощи семафоров оформить операцию a++ как критическую секцию. Извините что прошу, просто дисциплина преподается у меня это впервые и мы только начали её разбирать. Заранее спасибо.
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
#include <iostream>
#include "windows.h"
 
using namespace std;
HANDLE ghSemaphore;//????????? ???????
HANDLE aThread[2];//?????????? ???????
LONG cMax = 1;
 
int a=1;
 
DWORD WINAPI fproc1(LPDWORD lpData)//?????? ?????
{
WaitForSingleObject (ghSemaphore,1);//???????? ?????         
    a++;//??????????? ??????              
ReleaseSemaphore(ghSemaphore, 1, NULL);//???????? ??????
    return 0;//????????? ?????? ?????
}
DWORD WINAPI fproc2(LPDWORD lpData)//?????? ?????
{
WaitForSingleObject (ghSemaphore, 1);//???????? ?????        
    a++;//??????????? ??????              
ReleaseSemaphore(ghSemaphore,1,NULL);
    return 0;//????????? ?????
}
int main()
{
    cout<<"Artemyew G.I. ";
    cout<<"Lab1 SPZ\n";
    
    DWORD tid;
 CreateSemaphore( 
        NULL,   // íåò àòðèáóòà
        cMax,   // íà÷àëüíîå ñîñòîÿíèå
        cMax,   // ìàêñèìàëüíîå ñîñòîÿíèå
        NULL    // áåç èìåíè
    );
 
    DWORD dwThrdParam = 1;
    
    aThread[0]= CreateThread(  NULL,
                   0,
                   (LPTHREAD_START_ROUTINE)fproc1,
                   0,
                   0,
                   &tid );//??????? ?????? ?????
    aThread[1]= CreateThread(  NULL,
                   0,
                   (LPTHREAD_START_ROUTINE)fproc2,
                   0,
                   0,
                   &tid );//??????? ?????? ?????
  WaitForMultipleObjects(2, aThread, TRUE, 1);//?????????? ????????? ??????? 2-????? ???????
 
    CloseHandle(aThread[0]);//?????????? ?????? 1
    CloseHandle(aThread[1]);//?????????? ?????? 2
    CloseHandle(ghSemaphore);//?????????? ????????
    cout<<a<<'\n';//????? ??????????
    system("PAUSE"); //????????
    return 0; //????? ?????????
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2011, 20:11
Ответы с готовыми решениями:

Критическая секция
Требуется применить критическую секцию для процессов через разделяемую память. Ниже привел участок...

Критическая секция
такая задача. есть глобальный указатель на структуру. в main -е динамически выделяю память под...

Не работает критическая секция
Почему-то значение переменной становится равно не нулю даже при наличии критических секций. Почему?...

Критическая секция и внешний элемент
#include&lt;iostream&gt; #include&lt;windows.h&gt; using namespace std; struct zayavka { int num1;...

1
4 / 4 / 2
Регистрация: 20.09.2010
Сообщений: 102
07.03.2011, 00:14  [ТС] 2
Люди, ну хоть кто-нибудь ответьте пожалуйста.

Добавлено через 10 часов 10 минут
Товарищи, я ж не прошу писать программу с нуля. Она уже написана! Я прошу ответа от вас правильный код или нет ? Ну и если неправильный то в чем ошибка там ? Неужели так трудно ответить ?
0
07.03.2011, 00:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2011, 00:14
Помогаю со студенческими работами здесь

Критическая секция (флаги готовности)
Есть ли какие-нибудь примеры программ на С++ или C# (в крайнем случае на С) на алгоритм флаги...

Не удается правильно синхронизировать потоки, критическая секция
доброго времени суток. необходимо синхронизировать n = 2,4,8,16 потоков чтения записи...

Можно ли узнать, когда критическая секция будет захвачена?
Здравствуйте. Желаемый алгоритм: 1. Подождать, пока поток попытается захватить (или же...

Критическая секция
Очень срочно,помогите пожалуйста,на Сях,реализовать работу бензоколонки - бензин 80,92,95,98,Дизель...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru