Как и на большинстве платформ, почти все системные вызовы Windows API не обеспечивают барьеров потоков, кроме предотвращения одновременного доступа к ключевым частям ядра. Хотя я не могу сказать наверняка (документация, похоже, не отвечает на ваш явный вопрос), я был бы удивлен, если бы WinHTTP API предоставляет барьеры, которые не позволяют нескольким потокам наступать друг на друга (так сказать), особенно потому, что на самом деле это просто " helper" API, который напрямую использует вещи Winsock несколько более низкого уровня, и я бы взял на себя реализацию необходимых барьеров.
Мне также интересно, почему вы используете потоки таким образом для начала. Я практически ничего не знаю об API WinHTTP, но заметил WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS, что наводит меня на мысль, что вы можете реализовать асинхронный подход, который предотвратит любые проблемы с потокобезопасностью (и, вероятно, будет намного быстрее и эффективнее памяти).
Похоже, что механизм обратного вызова для WinHTTP довольно выразителен. См. WINHTTP_STATUS_CALLBACK. Предположительно, вы можете просто использовать неблокирующую операцию, создать прослушиватель событий и связать дескриптор соединения с dwContext
. Никаких потоков.
person
mr.stobbe
schedule
10.02.2017