Klen |
Отправлено: 06.01.2004, 03:02 |
|
Не зарегистрирован
|
Задача:
1 Пишем на С или С++ многопотоковую программу
2 Операционка переключает потоки для их выполнения.
3 В потоках вызываются апишные функции.
Так вот, Гейтс говорит что все потоки в виндах переключаются
с периодои 20 мс (вроде бы), вопрос — если апишный вызов выполняется более 20 мс, че тогда происходит?????? ну например файл открыть — его еще найти перед етим надо на носителях, а это может быть гораздо больше 20 мс.
Глюк несколько нитей успевают начать открывать файл , хотя флаги ставлю эклюзивный доступ, как следствие перекрытия выполнения вызова CreateFile в разных потоках!!! НИПОНЯТНО ЧЕ ДЕЛАТЬ
И КАК ЭТО ВСЕ СИНХРОНИЗИРОВАТЬ, ПОСКОЛЬКУ НЕТ СРЕДСТВ КОНРОЛИРОВАТЬ ВЫПОЛНЕНИЕ САМИХ АПИШНЫХ ВЫЗОВОВ.
Мож кто сталкивался? |
|
fellow |
Отправлено: 06.01.2004, 08:53 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 33
|
Защищайте ресурсы (файлы и прочее) с помощью семафоров, мьютексов и прочих объектов синхронизации. Когда получите мьютекс, тогда и вызывайте CreateFile. В другом потоке то же самое. |
|
|