问题标签 [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.
php - PHP 的 sem_acquire() -“等待”进程以什么顺序执行
所以 PHP 中的信号量对于同步作业/任务(更准确地说是进程)非常方便。
假设 1 个进程获得了对信号量的访问权并开始做它的事情(=工作)。其他 3 个进程也在以某种顺序触发sem_acquire()以获取访问权限。它们都被阻塞,等待信号量空闲并分配给每个信号量。
问题是:这 3 个单独的进程将以什么顺序执行?常见的逻辑是他们会先来执行(并被阻止),先服务(发布到工作),但我在官方文档中没有看到这个声明。
任何人都可以确认或纠正我吗?谢谢!
synchronization - 计数信号量的同步是否需要二进制信号量?
我的教授说,如果您有一个计数信号量(特别是 System V 信号量),如果两个进程尝试同时访问该信号量,则可能会出现同步问题,因此您需要用一个单独的来调解对计数信号量的访问二进制信号量。
我认为信号量的全部意义在于,如果两个进程试图同时访问一个信号量,内核会自动同步访问。这是真的?
c - 将 gtk 图形添加到现有控制台应用程序 - 共享内存?
我有使用 system v 库(信号量、消息队列)和多个进程制作的并发应用程序(机场的并发模拟)。
我不允许使用线程,这就是为什么我有一个进程线程和多个“平面”进程。
我想添加一些图形来显示带有 GTK(带有 Cairo)库的机场的交通情况。
如何添加图形?当我尝试将其添加到机场进程时,gtk_main 会阻止整个应用程序。我考虑过创建另一个进程并将图形添加到共享内存,但我读到它不会工作。
什么是最简单/最好的选择?
非常感谢!
c - 我这样做对吗?将结构中的指针映射到结构外部以使用 IPC 共享内存
免责声明:我是一个 C 菜鸟,正在从事一个使用共享内存段进行 IPC 的项目。我的计划是定义一个结构,它有一个指针 ( void *
) 指向映射 (via smget()
) 的剩余内存,它位于结构之外,我将使用它作为标头在进程之间传递有关请求状态的信息(它还将具有互斥体/条件结构)。
我只是想看看我这样做是否正确......我的问题在我的主要功能的评论中。
如果我不清楚某些事情,请告诉我,我对此还是很陌生。
javascript - Node.JS 和 System V 队列 / sysv
我用 PHP 编写的文件使用了 Linux 系统的 SYSV 函数。代码中使用的函数是msg_send
:msg_receive
和msg_get_queue
。我的团队希望使用 Node.JS 编写相同的功能。我最近的一次:https ://github.com/coderz/node-sysv-ipc 。上述解决方案似乎是半生不熟。是否有现成的节点模块可用于与 SYSV 消息队列交互?请帮助我。
c - System V 共享内存权限位:含义,以及如何更改
我知道当我创建一个共享内存块时,我们设置了权限,以便每个进程都可以使用 0777 在该块中读取和写入(不知道为什么,我的老师只是说要这样使用它)。
我用 shmget 创建为:
不过我想知道:
每个数字的含义
创建共享内存块后如何更改标志
如何只允许1个进程写入,而所有其他进程只能读取
concurrency - 如何可靠地初始化 IPC 信号量?
问题:如何使用 SysV 信号量在两个进程之间进行同步(我们称它们为procA
and procB
),假设两者都是从 shell 独立运行的(它们都不是由fork
/exec
组合产生的)并且信号量必须由其中之一创建这两个过程。
报价man semget
:
新创建的集合中的信号量的值是不确定的。(POSIX.1-2001 在这一点上是明确的。)尽管 Linux 和许多其他实现一样,将信号量值初始化为 0,但可移植应用程序不能依赖于此:它应该显式地将信号量初始化为所需的值。
假设我们想编写只依赖于 POSIX 保证而不依赖于 Linux 特定保证的可移植代码。很好,因此不可能原子地创建信号量集并对其进行初始化。这必须通过两个单独的调用来完成。
因此,用于创建信号量集的代码procA
将如下所示:
同样的procB
——这样,无论哪个进程碰巧第一次需要信号量,它也会创建它们;否则,它只是获取信号量集的 ID 并准备使用它。
当需要初始化时,问题开始出现。初始化指令当然semctl
是SETALL
——但是: • 初始化应该只进行一次,并且 • 初始化应该在使用信号量之前完成。这当然可以通过……信号量来强制执行,但不幸的是这样的解决方案是递归的:我们需要信号量来设置信号量,而信号量本身也需要设置信号量等等。
是否可以仅使用 sysV 信号量来做到这一点,或者我是否正确地假设我必须求助于其他 IPC 设施,如信号或消息队列才能可靠地设置这些信号量?
c - Linux System V IPC:无法初始化信号量值
我为演示目的创建了一个简单的信号量初始化示例:
但我收到错误:
我无法理解为什么编译器会抛出错误。标题也正确包含。
linux-kernel - sys v 从内核模块到用户空间进程的共享内存
我是 linux 内核模块开发的新手,我正在寻找从内核模块到用户空间进程的共享内存段,以逃避复制数据的延迟。
我正在使用 sys v 共享内存 api,当我在两个进程之间共享内存时它工作正常,但我无法在进程和内核模块之间共享内存。
下面是我的内核模块和用户空间应用程序的代码
服务器端:模块
客户端:进程
任何建议或文件都可以提供帮助。
shared-memory - 使用 sys v 在内核和用户空间之间共享内存
我看到使用 sys v api ( ) 在用户空间进程之间共享内存段非常容易shmget(), shmat(), shmdt()
,是否有任何解决方案可以使用相同的 api 从内核到用户空间共享内存。