PDA

Просмотр полной версии : Подскажите алгоритм синхронизации потоков


_nic
30.10.2009, 22:23
Схема выглядит примерно так

SOCKET s;
for(;;)
{
recv(прием данных);
switch(обработка принятых данных)
{
case A://старт потока 1
case B://старт потока 2
case C://старт потока 3
................
case X:...........................
}
.............
}

В потоки передается сокет из родительского потока,и в них происходит полноценный обменн данными через этот сокет, т.е. как минимум по одному send,recv.Вопрос в том как правильнее это все дело в дочерних потоках синхронизировать с recv в родительском :confused: Что бы данные одного потока не были приняты в другом и recv в мейн потоке не фризил работу с сокетами в дочерних.

Algol
30.10.2009, 22:37
А у тебя что, один сокет на несколько клиентов ?
Как так может быть ?
Сколько клиентов, столько и сокетов должно быть.

Gar|k
30.10.2009, 23:28
event-ы, симафоры, мутексы... если про windows говоришь. Асинхронная передача с событиями...

razb
31.10.2009, 12:43
симафоры, мутексы... если про windows говоришь.
а еще и условные переменные, и все это так же применимо под *nix системами )

Fata1ex
31.10.2009, 14:44
я писал статью (http://forum.antichat.ru/thread127262.html) про многопоточность. почитай - возможно, поможет

Jes
31.10.2009, 15:37
у Рихтера в книге целый раздел по синхронизации был а так же про TLS (локальная память потока)