Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
malishev
9 / 9 / 0
Регистрация: 17.12.2012
Сообщений: 123
28.12.2013, 15:55     синхронизации задач с несколькими потоками выполнения #1
Здравствуйте. Мне нужна ваша помощь.
Есть задача:
Реализовать моделирование «тупика» на примере работы с критическими секциями. Временные параметры модели определяются до начала моделирования (произвольны, но обязательно изменяемы). Провести анализ вероятности тупика, если она равна 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;
}
//---------------------------------------------------------------------------
Можете, пожалуйста, объяснить, как она работает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 15:55     синхронизации задач с несколькими потоками выполнения
Посмотрите здесь:

Работа с потоками. C++
C++ Объекты синхронизации. мьютексы, семафоры
C++ Работа с потоками
Подготовка к решению сложных задач и задач олимп.уровня C++
C++ Использование несколькими потоками одной функции
Понятие синхронизации потоков и процессов. Семафоры и мьютексы C++
Синхронизации многопоточности C++
C++ Графы, найти минимальное время, необходимое для выполнения всех задач

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru