C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
преключение контекстов и Windows, OS
Klen
  Отправлено: 06.01.2004, 03:02


Не зарегистрирован







Задача:
1 Пишем на С или С++ многопотоковую программу
2 Операционка переключает потоки для их выполнения.
3 В потоках вызываются апишные функции.

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


Дежурный стрелочник

Группа: Участник
Сообщений: 33



Защищайте ресурсы (файлы и прочее) с помощью семафоров, мьютексов и прочих объектов синхронизации. Когда получите мьютекс, тогда и вызывайте CreateFile. В другом потоке то же самое.

Вернуться в Вопросы программирования в C++Builder