![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
bagos |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 17.6.2006 Репутация: нет Всего: 1 |
Всем привет!
Решил разобраться с мютексами, с критик секциями вроде разобрался, если прально понимаю то мютексы тоже самое что и CS, только не для одного процесса а для нескольких. Нашел задачку и пытаюсь ее реализовать, программировать на с++ только начал, до этого паскаль и дельфи. Накидал программу, но в процессе отладки вылетают ошибки памяти, посмотрите пожалуйста на код, у меня есть подозрение что ошибка если есть сразу найдется, код небольшой. Задача: . Племя из п дикарей ест вместе из большого горшка, который вмешает т кусков тушеного миссионера. Когда дикарь хо¬чет обедать, он ест из горшка один кусок, если только горшок не пуст, иначе дикарь будит повара и ждет, пока тот не наполнит горшок. Повар, сварив обед, засыпает. Создать многопоточное приложение, моделирующее обед дикарей.
Это сообщение отредактировал(а) bagos - 24.11.2010, 20:13 |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
WinAPI знаю плохо, но возможно цитата из Джеффри Рихтера поможет:
|
|||
|
||||
bagos |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 17.6.2006 Репутация: нет Всего: 1 |
Потоки отрабатывают и прекращают свою работу, как мне заставить работать их постоянно, чтобы я сам когда надо завершил приложение?
Это сообщение отредактировал(а) bagos - 25.11.2010, 01:18 |
|||
|
||||
WhKitten |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2010 Репутация: нет Всего: нет |
Поток может завершится корректно только в том случае, если его функция возвращает управление. Если не нужно завершать поток, функция не должна возвращать управление, т.е должен быть бесконечный цикл или цикл с условием (например: while (threadIsActive[index]), где threadIsActive глобальный массив, установка threadIsActive[index] = 0 завершает поток). Помимо этого поток можно некорректно завершить из него самого с помощью ExitThread и из другого потока с помощью TerminateThread. А ещё он некорректно завершится, как завершится главный поток приложения (если он конечно завершится, а не будет ждать какого-нибудь мьютекса). И как я уже писал, некорректно использовать CreateThread для создания потока. Надо использовать _beginthreadex http://msdn.microsoft.com/en-us/library/kd...(v=VS.100).aspx Это сообщение отредактировал(а) WhKitten - 25.11.2010, 02:03 |
|||
|
||||
bagos |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 275 Регистрация: 17.6.2006 Репутация: нет Всего: 1 |
Большое спасибо! Попробую _beginthreadex
|
|||
|
||||
Игорь1024 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 11.5.2009 Где: Дальний Восток Репутация: нет Всего: нет |
Не согласен с WhKitten. В случае если не ипользуешь структуру TIDDATA (по-моему она так называется) можно и CreateThread.
Если ошибаюсь-исправте. --------------------
The God is real,unless he is declared as integer. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
Добавлено через 1 минуту и 44 секунды неверно. mutex нужен в основном для синхронизации между процессами, для потоков (независимо от количества) сойдет и CS. http://forum.vingrad.ru/forum/topic-315275.html |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 1 Всего: 196 |
Почему неверно? Имхо, ты сказал тоже самое, только другими словами. ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
В текущей реализации часть 'будит повара' отсуствует - дикарь просто сидит и ждет, пока в горшке что то появится.
Тут напрашивается введение дополнительного Event'а - для пробуждения повара (и, опционально, семафора - для учета количества мяса в горшке, что бы дикарь попусту не пробуждался) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |