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

时间:2015-06-03 09:24:34

标签: c linux multithreading sockets context-switch

环境:Linux
语言:C

如果我有服务器和客户端进程 服务器使用套接字与客户端通信。

在服务器进程中,它有两个线程(线程1,线程2)。
(线程1和线程2共享相同的文件描述符以与客户端通信)。
在客户端进程中,它只是单线程。

我除了服务器:

Sub ReplywithNote2()

    Set myNameSpace = Application.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myDestFolder = GetFolder("\\PO_Queries\Inbox\Completed")

    For i = Application.ActiveExplorer.Selection.Count To 1 Step -1
        With Application.ActiveExplorer.Selection.Item(i)
            If .Class = olMail Then
                .Move myDestFolder
            End If
        End With
    Next

End Sub

但多线程可能发生了上下文切换

服务器:

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

如何从客户端避免线程2 recv A.2? 我可以阻止上下文切换,直到线程1收回A.2消息?

1 个答案:

答案 0 :(得分:0)

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

更好(更复杂的方法)是让一个线程接收响应并将消息分派给正确的线程,但是每个线程上需要一个消息循环来与调度程序进行通信。