Форум: "Сети";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизПотокобезопасность connect(), socket(), select() и прочее Найти похожие ветки
← →
DVM © (2006-08-29 11:13) [0]Потокобезопасны ли данные функции Winsock?
← →
Rouse_ © (2006-08-29 11:17) [1]Да, непотокобезопасным может быть их использование.
← →
DVM © (2006-08-29 11:22) [2]
> Да, непотокобезопасным может быть их использование.
Если можно поподробнее, в каких случаях?
В моем случае сокет создается и подключается внутри потока, начинает читать данные в буфер, память под который выделяется функциями GetMem / FreeMem (потокобезопасными вроде как). Где могут оказаться подводные камни.
← →
Rouse_ © (2006-08-29 11:47) [3]Небезопасным будет доступ к данному буфферу из другого потока, поэтому любое обращение к данному буфферу желательно обрамлять критическими секциями
← →
DVM © (2006-08-29 12:00) [4]
> Небезопасным будет доступ к данному буфферу из другого потока
Прямого доступа к буферу нет. Указатель на буфер пересылается в основной поток с помощью SendMessage(). Доп поток ждет отработки операций с буфером в основном потоке.
Но я не об этом хотел спросить. Неужели ни одна из функций WinSock внутри себя не выделяет память под какие либо переменные и буферы? И как функции библиотеки Winsock могут знать, что их используют в многопоточной среде?
← →
Rouse_ © (2006-08-29 12:06) [5]Ну как узнать что процесс многопоточен, это очень просто - поток всегда знает ID процесса, а зная его можно узнать кол-во потоков принадлежащих процессу. Дело в том что сам по себе сокет является объектом ядра и не принадлежит твоему процессу. Процесс просто использует его. Что там происходит внутри (выделения буферов и т.п.) - тебе уже знать не интересно, главное чтобы работало :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c