gpt4 book ai didi

C++ System V 信号量 : Multiple server processes, 一个客户端进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:51 24 4
gpt4 key购买 nike

我有以下场景,我使用单个客户端进程和单个服务器进程,但我不确定如何设计以扩展服务器数量。

注意,下面的服务器和单个客户端是进程,而不是线程。我在共享内存中有一个 2D 4x4 数组矩阵 [0-based, row-major] 我希望多个服务器能够更新给定的分配单元格。对角线条目始终 = 1。例如,为了简单起见,假设有三台服务器 1、2、3。我想分配服务器 1 始终写入单元格 [1,0],以及服务器 2始终写入单元 [2,0] 和服务器 3 始终写入 [3,0]。

客户端的工作只是将矩阵从共享内存复制到本地拷贝,以便尽可能少地阻塞编写器。问题是:

在这种多服务器和一个客户端的场景中,我是否需要为每个单元设置一个信号量?如果是这样,我该如何协调所有服务器,因为一次只能写入一个服务器,而 [客户端可能是每个单元一个线程的多线程] 客户端在本地复制共享矩阵?相反,如果我使用二进制信号量,并且有多个服务器正在写入共享内存,那么由于多个服务器和一个客户端正在共享一个二进制信号量集,因此向哪些服务器发出允许写入的信号?我意识到例如 Actor 的多线程程序可能会更好,但我需要服务器是进程而不是线程。

一个简单的C++例子就够了,或者解释一下也不错。

最佳答案

一个简单的解决方案是使用受进程间锁保护的共享内存。每个进程在访问内存之前都需要绘制锁图。查看 boost 库中的共享内存和进程间锁。

http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess.html http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess/synchronization_mechanisms.html http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess/sharedmemorybetweenprocesses.html

这里有一个很好的例子: Shared-memory IPC synchronization (lock-free)

关于C++ System V 信号量 : Multiple server processes, 一个客户端进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com