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

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

Войти
Регистрация
Восстановить пароль
 
chainik94
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 2
#1

Критическая секция - C++

12.12.2013, 00:47. Просмотров 556. Ответов 3
Метки нет (Все метки)

Ребята помогите пожалуйста, надо сделать 5 потоков с помощью критической секции, незнаю как!!! пытался что-то сделать но ничего путного не получилось!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 00:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Критическая секция (C++):

Критическая секция не работает - C++
Значение переменной становится равно не нулю даже при наличии критических секций. Почему? #include <iostream> #define _AFXDLL ...

Потоки и критическая секция! - C++
Почему потоки проходят 14 раз, а не 10, как указано в MaxCount?????? Помогите с ответом пожалуйста! Написать программу, главный...

Есть ли критическая секция в стандартной библиотеке? - C++
Здравствуйте! Собственно, сам вопрос. Как использовать критическую секцию в C++? Нашёл информацию о подобном для windows и linux. Есть...

Private и public секция на одной странице памяти - C++
Здравствуйте, разве правильно, что private и public секция экземпляра класса находятся на одной странице памяти? Можно же из функции...

Критическая ошибка с <graphics.h> - C++
Подскажите если кто знает на Dev C++ графическая программа компилируется, но завершается критически : Прекращена работа программы ... ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.12.2013, 01:05 #2
Цитата Сообщение от chainik94 Посмотреть сообщение
надо сделать 5 потоков с помощью критической секции, незнаю как!!!
критическая секция к созданию потоков не имеет отношения

Цитата Сообщение от chainik94 Посмотреть сообщение
пытался что-то сделать но ничего путного не получилось
попытки в студию
0
chainik94
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 2
13.12.2013, 18:21  [ТС] #3
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>


int g_nIndex = 0;
const int MAX_TIMES =70;
DWORD g_dwTimes [MAX_TIMES];
CRITICAL_SECTION g_CriticalSection;
HANDLE hStdout;

static DWORD WINAPI FirstThread(void* pv)
{
COORD pos;
int a=1;
int i=1;
pos.X=3;
BOOL fDone=FALSE;
while (!fDone)
{
::EnterCriticalSection(&g_CriticalSection);
if (g_nIndex >= MAX_TIMES)
fDone = TRUE;
else
{
a=a+5;
pos.Y = i;
SetConsoleCursorPosition (hStdout ,pos);
printf(" %d", a);
i++;
g_dwTimes [g_nIndex++]=::GetTickCount();
}
::LeaveCriticalSection(&g_CriticalSection);
}
return 0;
}

static DWORD WINAPI SecondThread(void* pv)
{
COORD pos;
pos.X=25;
int b=2;
int i=1;
BOOL fDone=FALSE;
while (!fDone)
{
::EnterCriticalSection(&g_CriticalSection);
if (g_nIndex >= MAX_TIMES)
fDone = TRUE;
else
{
b=b*2;
pos.Y = i;
SetConsoleCursorPosition (hStdout ,pos);
printf(" %d",b);
i++;
g_dwTimes [++g_nIndex-1]=::GetTickCount();
}
::LeaveCriticalSection(&g_CriticalSection);
Sleep(10);
}
return 0;
}

static DWORD WINAPI ThirdThread(void* pv)
{
COORD pos;
pos.X=45;
int c=3;
int i=1;
BOOL fDone=FALSE;
while (!fDone)
{
::EnterCriticalSection(&g_CriticalSection);
if (g_nIndex >= MAX_TIMES)
fDone = TRUE;
else
{
pos.Y = i;
SetConsoleCursorPosition (hStdout ,pos);
printf(" %d",c);
i++;
g_dwTimes [++g_nIndex-2]=::GetTickCount();
}
::LeaveCriticalSection(&g_CriticalSection);
}
return 0;
}

int main(int argc, char* argv[])
{
HANDLE hThreads[3];
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
::InitializeCriticalSection(&g_CriticalSection);

DWORD dwThreadID;
hThreads[0]=::CreateThread(NULL, 0, FirstThread, &dwThreadID, 0, &dwThreadID);
hThreads[1]=::CreateThread(NULL, 0, SecondThread, &dwThreadID, 0, &dwThreadID);
hThreads[2]=::CreateThread(NULL, 0, ThirdThread, &dwThreadID, 0, &dwThreadID);
::WaitForMultipleObjects(3, hThreads, TRUE, INFINITE);

::CloseHandle(hThreads[0]);
::CloseHandle(hThreads[1]);
::CloseHandle(hThreads[2]);

:eleteCriticalSection(&g_CriticalSection);
getch();
return 0;
}

Добавлено через 1 минуту
ну это с 3 потоками! посмотрите пожалуйста правильно или нет?
0
EVP
322 / 244 / 43
Регистрация: 14.12.2010
Сообщений: 465
13.12.2013, 20:57 #4
Цитата Сообщение от chainik94 Посмотреть сообщение
Ребята помогите пожалуйста, надо сделать 5 потоков с помощью критической секции
Ты бы поиском сначала глянул решение.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 20:57
Привет! Вот еще темы с ответами:

Критическая секция - C++
Есть процесс в нем создается 2 потока, проблема в том, что когда один из потоков находится в критической секции и если его уничтожить или...

Секция resource - C++
подскажите. вот у меня есть в файлах ексешных секция .rsrc только там данные размещены не последовательно.. т.е. между данными есть...

Критическая секция - C#
Добрый день. Подскажите пожалуйста: в коде ниже если один поток пишет в file1.txt, другой не сможет начать запись в file2.txt, если...

Критическая секция - C++ WinAPI
Требуется применить критическую секцию для процессов через разделяемую память. Ниже привел участок кода, который это делает при условии...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.12.2013, 20:57
Ответ Создать тему
Опции темы

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