![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| and_master |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.2.2007 Репутация: нет Всего: нет |
Друзья, к вам еще парачка дурацких вопросов.... Я прочитал про критические секции, как средство синхронизации и разграничения доступа.. То есть, насколько я понимаю, поток первым вошедший в критическую секцию никого к охраняемым ресурсам не пустит... Тогда подскажите, почему в результате приведенной программки я получаю на экране 0, а не 10..... Растолкуйте пожалуйста...
|
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
потому, что сначала отрабатывает
а потом
|
||||
|
|||||
| and_master |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.2.2007 Репутация: нет Всего: нет |
А если надо наоборот? Тогда в чем смысл критических секций и что они дают вообще... Приведите фрагмент кода в пример, если вас не затруднит
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
смысл критических секций - синхронизация. Применять нужно когда несколько потоков пользуются какими-то общими ресурсами. Допустим, разные потоки записывают нечто в очередь. В этом случае нужно обеспечить, чтобы когда один поток записывает, другой не имел такой возможности пока первый полностью не закончит свою операцию. Или пока один не запишет, другие не могли ничего считать и ожидали завершения работы другого потока с общим ресурсом |
|||
|
||||
| and_master |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 26.2.2007 Репутация: нет Всего: нет |
Ну вот, в моем примере..я хочу, чтобы основной поток не имел доступа к массиву a , пока параллельный поток Thread не запишет в него данные..... как такое сделать?????
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: нет Всего: 60 |
у тебя это сделано, но просто первый поток получает доступ раньше второго. Поставь небольшой Sleep сразу после _beginthread и получишь наоборот
Добавлено @ 16:05 Критическая секция не определяет порядок доступа. Она просто не позволяет другим пользоваться ресурсами, которые контролирует, если с ними уже кто-то работает. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
В твоём случае лучше использовать события(CreateEvent, OpenEvent, WaitForSingleObject).
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: нет Всего: 10 |
В этом случае лучше использовать SuspendThread - ResumeThread - прямое управление остановкой и запуском потока, - и доступ к данным не осуществлять из главного потока приложения.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |