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