среды: Linux
языка: Cмногопоточного гнездо переключения контекста в с
Если у меня есть процессы сервера и клиента.
серверный сокет для связи с клиентом.
На сервере процесс имеет два потока (поток 1, поток 2).
(поток 1 и поток 2 используют один и тот же файловый дескриптор для связи с клиентом).
При клиентском процессе это просто один поток.
Я освобожденный
сервер:
thread 1:
send message A.1 to client
recv message A.2 from client
thread 2:
send message B.1 to client
recv message B.2 from client
но мульти-нить это возможно, произошло переключение контекста
сервер:
thread 1:
send message A.1 to client
context switch
thread 2:
send message B.1 to client
recv message A.2 from client
context switch
thread 1:
recv message B.2 from client
как избежать резьбы 2 ПРИЕМ А.2 от клиента ??
Могу ли я запретить контекстный переключатель до тех пор, пока не появится сообщение 1 recv A.2?
@ErikMan Это звучит достаточно хорошо для ответа. –
Вопрос здесь действительно * почему * у вас есть два потока чтения-записи на одного клиента? Это не соответствует чему-то реальному. У клиента только один. Я мог понять один прочитанный поток и один поток записи, но два потока чтения-записи просто не имеют смысла. – EJP
^^ что @EJP говорит. Если вы настаиваете на мультиплексировании разных потоков в одно соединение (и вам не нужно - для чего нужны сокеты/порты), вы должны использовать один поток tx, один поток rx и протокол для потоков mux/demux. Вы пытаетесь по-настоящему странно :( –