0

我正在维护一个现有系统,其中以前的开发人员对每个操作都在套接字上执行,需要多个线程来读取和写入,以前的开发人员已经在控制和互斥锁下执行了 io 操作。是否需要相互排除 C 套接字 IO 操作?或者由于套接字是全双工的,使用互斥体是多余的?只有一个线程

毫无疑问,线程将对象放入的处理队列是共享内存,必须注意相互排斥它。

4

2 回答 2

1

默认情况下,套接字不是线程安全的。因此,如果您有多个线程读取和写入它们,您将需要以某种方式锁定访问(例如使用互斥锁)。

于 2009-05-18T09:26:13.020 回答
0

在 TCP (AF_INET, SOCK_STREAM) 的情况下,可以有一个不同步的读取器线程 (recv) 和一个写入器线程 (send)。

但是从您的描述中,不清楚在您的代码中使用互斥锁的目的是什么 - 它看起来像“以前的开发人员”同步网络操作不是因为套接字,而是由于您的应用程序协议的要求。许多应用程序以这种方式执行通信:

lock
-> send request
<- recv reply
unlock

lock
-> send request
<- recv reply
unlock

此处需要锁定(如果涉及多个线程)以同步发送/接收对,否则您的应用程序协议可能会变成一堆不匹配的请求和回复。

于 2009-05-22T05:37:14.873 回答