здравствуйте. такие дела:
пытаюсь считать текст из файла пословно и добавить каждое слово в <map>
<map> определил глобально, файл тоже определен глобально.
функция чтения такая:
string str;
while (!mfile.eof()){
mfile >> str;
mymap[str]+=1;
}
return 0;
}
из мейна вызываю 4 потока
AfxBeginThread(reading_th1,NULL);
AfxBeginThread(reading_th1,NULL);
AfxBeginThread(reading_th1,NULL);
AfxBeginThread(reading_th1,NULL);
итог 3 состояния:
работает (при этом снижает общее время выполнения программы на несколько секунд, что и требуется)
зависает
ошибка
причем выскакивают рандомно, как понимаю это результат когда потоки одновременно пытаются прочитать файл.
готов слушать ваши ругательста и угрозы побить по рукам, но дайте ссылки или сами напишите примеры и теорию как это использовать ПРАВИЛЬНО. сегодня первый день пытаюсь сам прикрутить потоки к своей программе. а в учебнике вузовском нету )
20 января 2021 в 6:32
Медведь, как бы сказать помягче… лучше наводящий вопрос: а какой тип возвращает твоя AfxBeginThread()? Вот, и при чём здесь системный хендл потока?
А ещё учись пользоваться функцией GetLastError() и утилитой ErrorLookup!
P.S.Нормальный Win32 пример тут http://www.gamedev.net/community/forums/topic.asp?to...
а тебе надо заюзать это (скопируй ссылку в браузер) http://msdn.microsoft.com/en-US/library/afb2xh7f(v=VS.80).aspx
31 марта 2010 в 20:02
открыть для себя семафоры (или замки — частный случай семафора).
обращаешься к ресурсу (файлу) — закрываешь семафор. Другой поток будет ждать разрешения поработать с ресурсом.
закончил работать с ресурсом — открыл семафор.
А тут у тебя ситуация на грани аппаратного deadlock — в один момент времени только один поток имеет право обладать ресурсом.
31 марта 2010 в 21:02
Не думаю, что многопоточное чтение даст прирост производительности, в любом случае чтение надо будет производить последовательно. Вот если бы с каждой считанной строкой надо было производить какие-нибудь трудоемкие действия, то прирост бы был.
31 марта 2010 в 21:02
спасибо. инфу нашел. сейчас попробую.
еще небольшой вопрос:
можно ли миногопоточно перевести данные из <map> в <multimap> ?
как реализовать алгоритм? я что то думал, не знаю.
31 марта 2010 в 21:03
2Пашка ت Джиоев
при иногда верной работе программы (без семафоров, щас я их напишу попытаюсь), я получаю прирост 3-4 секунды. что очень для меня хорошо.
31 марта 2010 в 21:04
Работа с диском ой какая тормозная, какой тут может быть прирост, кроме константы? а константный прирост – фигня ненужная
31 марта 2010 в 22:01
почитай шилда, у него неплохо написана о реализации многопоточности.
31 марта 2010 в 22:01
можно ссылочку пожалуйста?
31 марта 2010 в 22:04
Какой длины строки?
Если небольшие, то я не понимаю откуда прирос может бытью
31 марта 2010 в 22:04
первый том войны и мира – 3мегабайта )