![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Доброго времени суток. Хочу уточнить, правильно ли я понимаю действие критических секций. Пусть есть код
Код, естественно, условный. Как я понимаю, доступ к переменной "а" будет осуществляться по очереди и одновременного обращения к ней из двух потоков быть не может. А переменная "b" является как бы "общедоступной" и в один прекрасный момент может получиться конфликт. Как итог: для переменной будет определяться, можно осуществить к ней доступ или нет, если она объявлена в нескольких местах между блоками EnterCriticalSection и LeaveCriticalSection для одной секции? Все ли верно? =)) |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Я не поняла... Добавлено @ 11:33 Для каждой переменной своя критичечкая секция Это сообщение отредактировал(а) Alca - 18.12.2009, 11:33 |
|||
|
||||
| xTr1m |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Кажется, я понял. Когда программа подходит к такой строке:
то проверяется, свободна ли секция (то есть можно ли дальше идти по коду). Одного тогда понять не могу. Когда я поставил breakpoint на такую строку
у меня секция занята, нажала F10 и у меня просто вышло из функции, то есть вышло, как-будто return стоял. даже к последней закрывающей скобке не дошел. Почему так? более того, поток просто убился! То есть получается, что нельзя в цикле прослушивать освободилась ли секция. Хм, тогда получается, что критические секции не подходят, если идет работа с двумя потоками и нужно использовать другое (мьютекс и т.п.) Но тогда какой в них смысл? Это сообщение отредактировал(а) xTr1m - 18.12.2009, 12:40 |
||||
|
|||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
xTr1m, если не нужно синхронить процессы (тоесть работать в пределах одного
процесса), то лучше использовать критические секции, так как они не обьекты ядра и работают быстрее. Как по мне у вас проблемма в том, что у вас после создания потоков вы их не ждёте (не помню чтобы винда ждала пока все потоки отработают) - тоесть выходите с мейна и прога закрывается. |
|||
|
||||
| Alca |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Добавлено через 4 минуты и 2 секунды http://www.williamspublishing.com/Books/5-8459-0879-5.html Добавлено через 9 минут и 38 секунд http://wm-help.net/books-online/book/59464.html Это сообщение отредактировал(а) Alca - 18.12.2009, 12:54 |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Это особенности отладчика. Скорее всего поток просто заблокировался, а отладчик переключился на другой, где и остановился
|
||||||
|
|||||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
а какие тогда существуют Необычные отладчики для этих целей? =))
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Существуют верификаторы - Valgrind, Intel Thread Checker. Еще существует комплексное решение - Intel Parallel Studio. Что касается именно отладчиков, то такие наверное существуют, но я о них не знаю |
|||
|
||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
Большое спасибо
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |