Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
malishev
9 / 9 / 0
Регистрация: 17.12.2012
Сообщений: 123
#1

синхронизации задач с несколькими потоками выполнения - C++

28.12.2013, 15:55. Просмотров 169. Ответов 0
Метки нет (Все метки)

Здравствуйте. Мне нужна ваша помощь.
Есть задача:
Реализовать моделирование «тупика» на примере работы с критическими секциями. Временные параметры модели определяются до начала моделирования (произвольны, но обязательно изменяемы). Провести анализ вероятности тупика, если она равна 1, то обосновать.

Вот код программы
C++ (Qt)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <winbase.h>
#include <winnt.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <process.h>
#include <queue>
#include <time.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
//структура масива
struct mass
{
  bool Z;
  int mass[100];
};
// 2 масива
mass m1;
mass m2;
//процедуры потока  1
DWORD WINAPI POTOK1 (LPVOID param)
//void POTOK1(void* params)
{
   printf("POtok1 \n");
   while(true)
   {
   while(m1.Z)
   {
      printf("O1 m1 ");
      Sleep(100);
   };
   printf("/n");
   m1.Z=true;
   m2.Z=true;
   for (int i=0;i<100;i++)
   {
     m1.mass[i]=1;
   };
   //m1.Z=false;
   while(m2.Z)
   {
      printf("O1 m2 ");
      Sleep(100);
   };
   printf("/n");
   //m2.Z=true;
   for (int i=0;i<100;i++)
   {
     m2.mass[i]=1;
   };
   m1.Z=false;
   m2.Z=false;
   }
   //return 0;
};
//процедуры потока  2
DWORD WINAPI POTOK2 (LPVOID param)
//void POTOK2(void* params)
{
   printf("POtok2 \n");
   //Sleep(100);
   while(true)
   {
   while(m2.Z)
   {
       printf("O2 m2 ");
       Sleep(100);
   };
   printf("/n");
   m2.Z=true;
   m1.Z=true;
   for (int i=0;i<100;i++)
   {
     m2.mass[i]=2;
   };
   //m2.Z=false;
   while(m1.Z)
   {
       printf("O2 m1 ");
       Sleep(100);
   };
   printf("/n");
   //m1.Z=true;
   for (int i=0;i<100;i++)
   {
     m1.mass[i]=2;
   };
   m2.Z=false;
   m1.Z=false;
   }
   //return 0;
};
#pragma argsused
int main(int argc, char* argv[])
{
        m1.Z=false;
        m2.Z=false;
       // _beginthread(POTOK1, 0, (void*) NULL);
       // _beginthread(POTOK2, 0, (void*) NULL);
        HANDLE p1;
        HANDLE p2;
 
 
        p1=CreateThread(0,0,POTOK1,NULL,CREATE_SUSPENDED,NULL);
        p2=CreateThread(0,0,POTOK2,NULL,CREATE_SUSPENDED,NULL);
        ResumeThread(p1);
        ResumeThread(p2);
        while(true)
        {
        Sleep(999);
        printf("[ \n");
        printf("MAasiv 1 \n");
        for (int i=0;i<100;i++)
        {
                 printf("%d",m1.mass[i]);
 
        };
        printf("\n");
        printf("MAasiv 2 \n");
        for (int i=0;i<100;i++)
        {
                 printf("%d",m2.mass[i]);
 
        };
        printf("\n");
        printf("] \n");
        }
        system("PAUSE");
        return 0;
}
//---------------------------------------------------------------------------
Можете, пожалуйста, объяснить, как она работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 15:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос синхронизации задач с несколькими потоками выполнения (C++):

Использование несколькими потоками одной функции - C++
Есть вот такая функция для =которую выполняют рабочие потоки DWORD WINAPI ThreadFunc(void *pV) { Data* pD = (Data*)pV; int n,...

Графы, найти минимальное время, необходимое для выполнения всех задач - C++
Граф представлен в виде списка смежных. Есть множество задач T1, T2, …, Tn, для выполнения которых необходимо время t1, t2, …, tn...

Подготовка к решению сложных задач и задач олимп.уровня - C++
Собственно, интересует какую литературу стоит почитать, для решению сложных и интересных задач или может быть есть какие- нибудь известные...

Функция синхронизации - C++
Что я делаю не так? Подскажите, потому что сам не могу найти(функция должна перебирать элементы в vectore и map, и оставить только...

Синхронизации многопоточности - C++
добрый день, пытаюсь сделать синхронизацию потом на примере producer\consumer, но что-то не выходит, я в consumere сделал ожидания...

Средства синхронизации в windows - C++
В программе порождаються два процесса работающие с матрицей розмером m*n .Один поток транспонирует матрицу ,другой выводит сумму строк в...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2013, 15:55
Привет! Вот еще темы с ответами:

Синхронизации задач с несколькими потоками выполнения - C++ WinAPI
Задание: Реализовать схему &quot;оповещения&quot; трех ожидающих потоков о помещении в очередь (произвольного формата) некоторого сообщения на основе...

Программа синхронизации папок по сети с несколькими клиентами - C++
Здравствуйте! Помогите,пожалуйста с задачей. Мне нужно написать программу синхронизации папок по сети с несколькими...

.NET 4.x Работа с несколькими потоками - Visual Basic .NET
у меня вопрос, к тем кто работает с многопоточными приложениями у меня алгоритм такой: в основном потоке запускаю потоки в цикле ...

Закачка файла несколькими потоками. - Java
Кто знает, как на Java посылать на сервер HTML-запрос на скачивание части файла? Большая просьба привести пример.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru