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

Задача о философах с использованием событий - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Организовать введение данных в массив , обработку элементов и выведение результатов используя указатели. Дано натуральное число N и одномерный массив http://www.cyberforum.ru/cpp-beginners/thread1115939.html
Организовать введение данных в массив , обработку элементов и выведение результатов используя указатели. Дано натуральное число N и одномерный массив А1, А2,...,AN целых чисел. Найти три не находящихся рядом числа, умножение котах равняется Р. B C++!
C++ Dev Cpp Решение системы алгебраических уравнений компактным методом исключения Здравствуйте! Есть задание, "решение системы алгебраических уравнений компактным методом исключения. Коэффициенты обрабатываются в двух матрицах, матрица действительной части и матрица мнимой части комплексного числа в алгебраической форме." На входе - txt файл с коэффициентами системы в виде матрицы размером N строк на N+1 столбцов, в N+1 столбце - свободные члены системы, коэффициенты -... http://www.cyberforum.ru/cpp-beginners/thread1115928.html
C++ Массив. нужно перемножить элементы столбика и вывести результат
я понял только как считать всю инф. с файла, а вот как перемножить теперь эл-ты 1 столбца? #include <iostream> #include <fstream> #include <iomanip> #include <stdlib.h> using namespace std; int main() { setlocale (LC_ALL, "RUS"); int n=0;
C++ более компактный код
нужна замыниты вес то что я написал в функции void n() на более компактный код (суть кода выравнивать столбик ) //Calculator #include<iostream> #include<conio.h> using namespace std;
C++ Сериализация и десериализация двусвязного списка http://www.cyberforum.ru/cpp-beginners/thread1115917.html
Ребят, помогите плиз решить задачу, которые сутки сижу нифига не получается(( Может я просто, глупый((( Реализуйте функции сериализации и десериализации двусвязного списка, заданного следующим образом: struct ListNode { ListNode * prev; ListNode * next; ListNode * rand; // указатель на произвольный элемент данного списка std::string data; };
C++ OpenMP в Dev CPP как подключить openMP в DevCPP? подробнее

Показать сообщение отдельно
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
11.03.2014, 03:27
Кстати, я тут ошибку сделал, именно поэтому вы видите, что только 1 из философов действует.

Так же сделал что бы не перемешивался вывод:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <windows.h>
#include <cstdlib>
#include <cstdio>
 
#define min 100
#define max 500
#define step 4
 
struct ThreadArgs {
   int philosopherNum;
   HANDLE forks[ 2 ];
};
 
DWORD philosopherAction( LPVOID arg );
 
CRITICAL_SECTION csFlag;
 
void output( const char *msg ) {
   EnterCriticalSection( &csFlag );
   printf( msg );
   LeaveCriticalSection( &csFlag );
}
 
void output( const char *msg, int arg1 ) {
   EnterCriticalSection( &csFlag );
   printf( msg, arg1 );
   LeaveCriticalSection( &csFlag );
}
 
void output( const char *msg, int arg1, int arg2 ) {
   EnterCriticalSection( &csFlag );
   printf( msg, arg1, arg2 );
   LeaveCriticalSection( &csFlag );
}
 
int main() {
   const unsigned int PHILOSOPHERS_NUM = 5;
   
   HANDLE forks[ PHILOSOPHERS_NUM ] = {};
   HANDLE philosophers[ PHILOSOPHERS_NUM ] = {};
   
   ThreadArgs args[ PHILOSOPHERS_NUM ];
   
   InitializeCriticalSection( &csFlag );
   
   for ( unsigned int i = 0; i < PHILOSOPHERS_NUM; i++ ) {
      forks[ i ] = CreateEvent( 0, true, false, NULL ); //тип сброса- ручной
   }
   
   for ( unsigned int i = 0; i < PHILOSOPHERS_NUM; i++) {
      args[ i ].philosopherNum = i;
      args[ i ].forks[ 0 ] = forks[ i ];
      
      if ( i < 4 )
         args[ i ].forks[ 1 ] = forks[ i + 1 ];
      else
         args[ i ].forks[ 1 ] = forks[ 0 ];
      
      philosophers[ i ] = CreateThread( NULL, 0, philosopherAction, &args[ i ], 0, NULL );
   }
   
   WaitForMultipleObjects( PHILOSOPHERS_NUM, philosophers, true, INFINITE );
   
   DeleteCriticalSection( &csFlag );
   
   return 0;
}
 
DWORD philosopherAction( LPVOID arg ) {
   ThreadArgs *args = static_cast< ThreadArgs * >( arg );
   
   for(int i = 0; i < step; i++) {          //повторяет 4 раза
      Sleep( min + rand() % ( max-min ));  //задержка
      output( "Philosopher[ %i ] want to eat.\n", args->philosopherNum );
      output( "Try to catch forks.\n");
      output( "Left[%i] and right[%i] forks - ", args->philosopherNum, args->philosopherNum + 1 );
      
      if ( WaitForMultipleObjects( 2, args->forks, true, 1 ) != WAIT_OBJECT_0 ) {
         SetEvent( args->forks[ 0 ] );          //объект "событие" в сигнальное состояние
         SetEvent( args->forks[ 1 ] );          //объект "событие" в сигнальное состояние
         output( "Eating." );                   //философ ест
         Sleep( min + rand() % ( max - min ));
         ResetEvent( args->forks[ 0 ] );        //сброс события
         ResetEvent( args->forks[ 1 ] );        //сброс события
      }
      
      Sleep( min + rand() % ( max-min ));
      
      output( "Philosopher[%i] THINKING.\n", args->philosopherNum ); //философ думает
   }
   
   return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru