【发布时间】:2015-03-15 12:45:11
【问题描述】:
我有以下场景,我使用单个客户端进程和单个服务器进程,但我不确定如何设计以扩展服务器数量。
注意,服务器和单个客户端是进程,而不是线程。我在共享内存中有一个 2D 4x4 数组矩阵 [0-based,row-major],我希望多个服务器能够更新给定的分配单元。对角线条目始终 = 1。例如,为了简单起见,假设有三个服务器 1、2、3。我想分配服务器 1 始终写入单元格 [1,0] 和服务器 2始终写入单元格 [2,0] 和服务器 3 始终写入 [3,0]。
客户端的工作只是将矩阵从共享内存复制到本地副本,以便尽可能少地阻塞写入器。问题是:
在这种多服务器和一个客户端的场景中,我是否需要为每个单元设置一个信号量?如果是这样,我如何协调所有服务器,因为一次只能写入一个服务器,而 [客户端可能是每个单元多线程一个线程] 客户端在本地复制共享矩阵?相反,如果我使用二进制信号量,并且有多个服务器写入共享内存,那么由于多个服务器和一个客户端共享一个二进制信号量集,哪些服务器会发出允许写入的信号?我意识到例如演员的多线程程序可能会更好,但我需要服务器是进程而不是线程。
一个简单的C++例子就够了,或者解释一下也不错。
【问题讨论】:
标签: c++ shared-memory semaphore