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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 30 Oct 2009.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Схема выглядит примерно так
    Code:
    SOCKET s;
    for(;;)
    {
    recv(прием данных);
    switch(обработка принятых данных)
    {
    case A://старт потока 1
    case B://старт потока 2
    case C://старт потока 3
    ................
    case X:...........................
    }
    .............
    }
    
    В потоки передается сокет из родительского потока,и в них происходит полноценный обменн данными через этот сокет, т.е. как минимум по одному send,recv.Вопрос в том как правильнее это все дело в дочерних потоках синхронизировать с recv в родительском :confused: Что бы данные одного потока не были приняты в другом и recv в мейн потоке не фризил работу с сокетами в дочерних.
     
  2. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    А у тебя что, один сокет на несколько клиентов ?
    Как так может быть ?
    Сколько клиентов, столько и сокетов должно быть.
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    event-ы, симафоры, мутексы... если про windows говоришь. Асинхронная передача с событиями...
     
    _________________________
  4. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    а еще и условные переменные, и все это так же применимо под *nix системами )
     
  5. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    я писал статью про многопоточность. почитай - возможно, поможет
     
  6. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    у Рихтера в книге целый раздел по синхронизации был а так же про TLS (локальная память потока)
     
    2 people like this.