Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Потокобезопасность 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.064 c
2-1169099675
Garacio
2007-01-18 08:54
2007.02.04
изменить/вернуть обратносистемную дату с помощью DateTimePicker


2-1169318929
mary84
2007-01-20 21:48
2007.02.04
как создать в базе данных таблицу картинок jpg


15-1168945620
Alexm112
2007-01-16 14:07
2007.02.04
Обеспечение безопасности пассажиров при полетах на самолете.


3-1163531908
Kolan
2006-11-14 22:18
2007.02.04
Неужели циклы в T-SQL так тупо сделаны - неверю...


15-1168865021
Курдль
2007-01-15 15:43
2007.02.04
Что такое iPod?