问题标签 [sysv-ipc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
163 浏览

php - PHP 的 sem_acquire() -“等待”进程以什么顺序执行

所以 PHP 中的信号量对于同步作业/任务(更准确地说是进程)非常方便。

假设 1 个进程获得了对信号量的访问权并开始做它的事情(=工作)。其他 3 个进程也在以某种顺序触发sem_acquire()以获取访问权限。它们都被阻塞,等待信号量空闲并分配给每个信号量。

问题是:这 3 个单独的进程将以什么顺序执行?常见的逻辑是他们会先来执行(并被阻止),先服务(发布到工作),但我在官方文档中没有看到这个声明。

任何人都可以确认或纠正我吗?谢谢!

0 投票
1 回答
40 浏览

synchronization - 计数信号量的同步是否需要二进制信号量?

我的教授说,如果您有一个计数信号量(特别是 System V 信号量),如果两个进程尝试同时访问该信号量,则可能会出现同步问题,因此您需要用一个单独的来调解对计数信号量的访问二进制信号量。

我认为信号量的全部意义在于,如果两个进程试图同时访问一个信号量,内核会自动同步访问。这是真的?

0 投票
1 回答
149 浏览

c - 将 gtk 图形添加到现有控制台应用程序 - 共享内存?

我有使用 system v 库(信号量、消息队列)和多个进程制作的并发应用程序(机场的并发模拟)。

我不允许使用线程,这就是为什么我有一个进程线程和多个“平面”进程。

我想添加一些图形来显示带有 GTK(带有 Cairo)库的机场的交通情况。

如何添加图形?当我尝试将其添加到机场进程时,gtk_main 会阻止整个应用程序。我考虑过创建另一个进程并将图形添加到共享内存,但我读到它不会工作。

什么是最简单/最好的选择?

非常感谢!

0 投票
1 回答
654 浏览

c - 我这样做对吗?将结构中的指针映射到结构外部以使用 IPC 共享内存

免责声明:我是一个 C 菜鸟,正在从事一个使用共享内存段进行 IPC 的项目。我的计划是定义一个结构,它有一个指针 ( void *) 指向映射 (via smget()) 的剩余内存,它位于结构之外,我将使用它作为标头在进程之间传递有关请求状态的信息(它还将具有互斥体/条件结构)。

我只是想看看我这样做是否正确......我的问题在我的主要功能的评论中。

如果我不清楚某些事情,请告诉我,我对此还是很陌生。

0 投票
0 回答
257 浏览

javascript - Node.JS 和 System V 队列 / sysv

我用 PHP 编写的文件使用了 Linux 系统的 SYSV 函数。代码中使用的函数是msg_sendmsg_receivemsg_get_queue。我的团队希望使用 Node.JS 编写相同的功能。我最近的一次:https ://github.com/coderz/node-sysv-ipc 。上述解决方案似乎是半生不熟。是否有现成的节点模块可用于与 SYSV 消息队列交互?请帮助我。

0 投票
1 回答
810 浏览

c - System V 共享内存权限位:含义,以及如何更改

我知道当我创建一个共享内存块时,我们设置了权限,以便每个进程都可以使用 0777 在该块中读取和写入(不知道为什么,我的老师只是说要这样使用它)。

我用 shmget 创建为:

不过我想知道:

  • 每个数字的含义

  • 创建共享内存块后如何更改标志

  • 如何只允许1个进程写入,而所有其他进程只能读取

0 投票
1 回答
501 浏览

concurrency - 如何可靠地初始化 IPC 信号量?

问题:如何使用 SysV 信号量在两个进程之间进行同步(我们称它们为procAand procB),假设两者都是从 shell 独立运行的(它们都不是由fork/exec组合产生的)并且信号量必须由其中之一创建这两个过程。

报价man semget

新创建的集合中的信号量的值是不确定的。(POSIX.1-2001 在这一点上是明确的。)尽管 Linux 和许多其他实现一样,将信号量值初始化为 0,但可移植应用程序不能依赖于此:它应该显式地将信号量初始化为所需的值。

假设我们想编写只依赖于 POSIX 保证而不依赖于 Linux 特定保证的可移植代码。很好,因此不可能原子地创建信号量集并对其进行初始化。这必须通过两个单独的调用来完成。

因此,用于创建信号量集的代码procA将如下所示:

同样的procB——这样,无论哪个进程碰巧第一次需要信号量,它也会创建它们;否则,它只是获取信号量集的 ID 并准备使用它。

当需要初始化时,问题开始出现。初始化指令当然semctlSETALL——但是: • 初始化应该只进行一次,并且 • 初始化应该在使用信号量之前完成。这当然可以通过……信号量来强制执行,但不幸的是这样的解决方案是递归的:我们需要信号量来设置信号量,而信号量本身也需要设置信号量等等。

是否可以仅使用 sysV 信号量来做到这一点,或者我是否正确地假设我必须求助于其他 IPC 设施,如信号或消息队列才能可靠地设置这些信号量?

0 投票
1 回答
1502 浏览

c - Linux System V IPC:无法初始化信号量值

我为演示目的创建了一个简单的信号量初始化示例:

但我收到错误:

我无法理解为什么编译器会抛出错误。标题也正确包含。

0 投票
1 回答
1534 浏览

linux-kernel - sys v 从内核模块到用户空间进程的共享内存

我是 linux 内核模块开发的新手,我正在寻找从内核模块到用户空间进程的共享内存段,以逃避复制数据的延迟。

我正在使用 sys v 共享内存 api,当我在两个进程之间共享内存时它工作正常,但我无法在进程和内核模块之间共享内存。

下面是我的内核模块和用户空间应用程序的代码

服务器端:模块

客户端:进程

任何建议或文件都可以提供帮助。

0 投票
1 回答
59 浏览

shared-memory - 使用 sys v 在内核和用户空间之间共享内存

我看到使用 sys v api ( ) 在用户空间进程之间共享内存段非常容易shmget(), shmat(), shmdt(),是否有任何解决方案可以使用相同的 api 从内核到用户空间共享内存。