我正在编写一个复杂的通信协议的一部分,以从单个计算机终端控制多个医疗设备。计算机终端需要管理大约20个这样的设备。每个设备都使用相同的协议进行通信,称为 DEP。现在,我创建了一个循环,该循环在不同设备中进行多路复用以发送请求并接收与特定设备关联的患者数据。所以这个循环的结构,一般来说,是这样的:
Begin Loop
Select Device i
if Device.Socket has Data
Strip Header
Copy Data on Queue
end if
rem_time = TIMEOUT - (CurrentTime - Device.Session.LastRequestTime)
if TIMEOUT <= 0
Send Re-association Request to Device
else
Sort Pending Request According to Time
Select First Request
Send the Request
Set Request Priority Least
end Select
end if
end Select
end Loop
我可能在上面的伪代码中犯了一些错误,但我希望我已经清楚了这个循环试图做什么。我有选择设备的优先级列表结构和该设备的待处理请求,因此,所有请求和设备都以良好的最佳间隔选择。
我忘了说,上面的循环实际上并没有解析接收到的数据,但它只是剥离了标题并将其放入队列中。队列中的数据在不同的线程中解析并记录在文件或数据库中。
我希望添加一个功能,以便其他计算机也可以导入数据并远程控制连接到计算机终端的设备。为此,我需要创建一个套接字来监听这个无限循环中的命令,并在执行解析的不同线程中发送数据。
现在,我对所有并发专家的问题是:使用单个套接字在两个不同的线程中进行读写是一个好的设计吗?每个线程都将严格参与读取或写入,而不是两者。另外,我相信套接字在进程级别上是同步的,所以我需要锁来同步来自不同线程的一个套接字的读写吗?