Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 18:49   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Критические секции

Не когда не приходилось с ними сталкиваться, поэтому появился вопрос что это такое и как ее хавать?
Наткнулся на сайте одном, вот на такой пример: http://www.firststeps.ru/mfc/winapi/r.php?116
Вообщем понял или не совсем понял то что, при входе в критическую секцию на разных потоках, один к примеру глобальный массив считается якобы за разный.
Но все равно не понятно, каков итоговый результат после использования критических секций, я если обращусь к нему без всяких крит. секций.
То есть например в одной крит. секции некий массив суммировался, в другой он сортировался, что в итоге выйдет не понимаю.
coNsept вне форума Ответить с цитированием
Старый 08.09.2011, 19:12   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Наткнулся на этот код:
Код:
// ...

#define MAX_ARRAY 5


int array[MAX_ARRAY];

void EmptyArray();
void PrintArray();
void FullArray();

void main()
{
	EmptyArray();
	PrintArray();
	FullArray();
	PrintArray();
	EmptyArray();
	PrintArray();
}

void EmptyArray()
{
	for (int x=0;x<(MAX_ARRAY+1); x++) array[x]=0;
	Sleep(1000);
}

// ...
И перестал читать.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 08.09.2011, 19:42   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Критическую секцию можно представить как лужайку, окружённую со всех сторон нерушимым забором. В заборе две калитки — одна только на вход, другая только на выход.

Теперь представьте, что у нас есть толпа рыцарей, и периодически они хотят на лужайке отдохнуть. Не обязательно все одновременно, хотя и такое не исключено.
Но места для отдыха на лужайке достаточно только для одного рыцаря!

Система работает так: рыцари, которые хотят отдохнуть, собираются у входной калитки, и как только лужайка освобождается, кидают жребий, кому отдыхать. Тот, кто вытягивает счастливый билетик, проходит на лужайку и начинает отдыхать. Остальные продолжают ждать у калитки (при этом некоторые могут забить на отдых и пойти по другим делам). Как только лужаечный рыцарь отдохнул, он покидает лужайку через выход, а ждущие рыцари кидают новый жребий.

Так вот, калитка на вход/выход — критическая секция, рыцари — потоки, а лужайка — это ваш массив.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.09.2011, 19:44   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Критические секции могут использоваться, например, для того, что бы с одним массивом одновременно не работали две функции. Т.е. если, например, одна функция будет писать данный в массив, а вторая удалять определённые строки, то всё может пойти не по вашему плану. А если же в каждой функции добавить вход/выход из критической секции (одной и той же), то такого не произойдёт. Певрая функция "займёт" критическую секцию, начнёт работать... В это время вторая функция будет ждать освобождения этой критической секции и не станет работать с этим же массивом, пока первая функция не отработает.
TwiX вне форума Ответить с цитированием
Старый 08.09.2011, 20:51   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

coNsept

Не когда не приходилось с ними сталкиваться, поэтому появился вопрос что это такое и как ее хавать?

Гоогле "Рихтер критические секции"
Rififi вне форума Ответить с цитированием
Старый 08.09.2011, 23:35   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Критическая секция - объект, который используется для синхронизации потоков в процессе. Только один поток может владеть критической секцией, поэтому если несколько несколько потоков запросят доступ к критической секции, будет выполнятся лишь тот, который успел завладеть критической секцией, остальные будут остановлены и ждать своей очереди на обладание критической секцией. Вот такая порнушка, в общем.
f.hump вне форума Ответить с цитированием
Старый 09.09.2011, 00:48   #7
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Просто почитай хорошую книжку про многопоточность и примитивы синхронизации, так будет проще и понятнее )
Son Of Pain вне форума Ответить с цитированием
Старый 09.09.2011, 00:54   #8
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Хм, спасибо большое теперь все понятно.
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
критические точки alex_pm Помощь студентам 1 05.05.2011 00:52
Объекты ожидания в Delphi. Мьютекс, Семафор и Критические секции. OlgaZN Помощь студентам 2 11.06.2010 12:01
Критические секции в Linux Sparky Помощь студентам 2 28.05.2010 08:33
Критические секции Altera Общие вопросы Delphi 2 25.12.2009 10:45
Секции russian-stalker Общие вопросы Delphi 5 06.09.2008 20:25