c中的多线程套接字上下文切换

Multi threaded socket context switch in c

环境: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 从客户端接收到 A.2?
我可以阻止上下文切换直到线程 1 收到 A.2 消息吗?

最简单(不好的做法,不是最佳)的方法是使用一个互斥体来阻止线程 2 发送消息 B.1,直到收到 A.2。

一种更好(也更复杂)的方法是让一个线程接收响应并将消息分派到正确的线程,但是您需要在每个线程上有一个消息循环以与分派器进行通信。