问题标签 [semaphore]

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 投票
3 回答
3699 浏览

java - 当我们在消费者和生产者缓冲区中使用信号量时

我正在处理消费者和生产者中的 BoundedBuffer 类,我们想在该类中使用 Semaphore,但每次使用acquire()时都会出错,错误 是:

未报告的异常 java.lang.InterruptedException; 必须被抓住或宣布被扔掉

这是代码:

0 投票
2 回答
885 浏览

ipc - 回复:共享内存和信号量

IPC 机制是使用共享内存和信号量来同步单工(如管道)还是双工(如消息队列)?

0 投票
1 回答
1674 浏览

ipc - 使用 POSIX 共享内存时,您在哪里放置 POSIX 信号量?

我正在尝试使用 POSIX 共享内存和 POSIX 信号量构建客户端服务器应用程序。我是否必须将信号量放在共享内存段中,或者信号量可以只是全局变量吗?我希望遵守 POSIX 约定。

0 投票
3 回答
4480 浏览

c++ - OS X 上的奇数/错误 sem_getvalue 信号量行为

我有一些非常基本的信号量代码,在 Linux 上运行良好,但我一辈子都无法让它在 OS X 上正常运行......它返回最奇怪的结果......

在 OS X 上使用 g++ 编译它会返回以下输出:

而在 Ubuntu 上,我得到了明显更理智的结果:

我已经连续 3 个小时了,无法弄清楚为什么 OS X 会返回如此奇怪的结果......

我尝试使用文件路径作为信号量名称,但没有任何区别。

我会很感激我能得到的任何帮助。

0 投票
2 回答
2890 浏览

client-server - 为什么某些 posix 共享内存段和 posix 信号量对 ipcs 不可见

我使用 posix 共享内存和 pshared=1 的 posix 未命名信号量构建了一个客户端服务器应用程序。信号量放置在共享内存中。程序运行良好,但是当我键入 ipcs -m 或 ipcs -s 时,我没有看到我创建的任何共享内存段或信号量。为什么会这样?


0 投票
7 回答
7789 浏览

c# - 从应用程序运行一个实例

我有一个 Windows 应用程序(C#),我需要将它配置为当时从应用程序运行一个实例,这意味着一个用户单击了 .exe 文件并且应用程序运行并且用户没有关闭第一个实例正在运行的应用程序需要运行下一个实例,因此它应该出现在第一个实例中,而不是打开新实例。

谁能帮我怎么做?

提前致谢

0 投票
1 回答
4284 浏览

perl - Perl 中的进程间互斥锁

我有一个在 mod_perl 下执行的 Perl CGI 程序。在程序中,我想防止多个进程同时访问一个资源。

问题是 :

  1. 如果以前从未创建过 10023 id(无论是由同一进程还是其他进程),我如何才能使 Code(1) 仅在信号量时创建一个新的信号量?
  2. 如何仅在第一次创建具有 10023 id 的信号量时执行 Code(2)?信号量只能初始化一次。

另一种方法是创建一个空文件用于锁定目的。但是,这最终将拥有数千个临时文件。 链接文本

0 投票
4 回答
8685 浏览

unix - semget 因“权限被拒绝”而失败

我有 2 个进程 P1 和 P2。P1 以 root 身份运行,并通过以下调用创建信号量:

semget(键,1,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);

并试图在另一个进程 P2 中获取相同信号量的句柄,该进程在普通用户的上下文中运行。在此过程中,semget 调用成功,但 semop 调用失败并显示“Permission Denied”(Errno = 13)。

任何指针都会有很大帮助。

~ps7

0 投票
4 回答
12232 浏览

c - 如何终止正在等待信号量操作的线程

我正在编写一个将共享内存和信号量用于 ipc 的程序。有一个主服务器进程创建共享内存和信号量。任何数量的客户端进程都可以附加到共享内存并在允许时对其进行读写。信号量提供阻塞机制来控制读取和写入。一切正常,除非我尝试终止客户端。访问共享内存的信号量块位于线程中,并且在进程终止时,我无法释放信号量块,因此线程正确退出。我该怎么办?这是针对 Linux 的。

具体来说,有一个 shm 和两个 sem。第一个 sem 阻止写入,第二个阻止读取。当客户端有东西要写时,它会等待 write sem 为 0,然后将其设置为 1,写入,然后将 read sem 设置为 0,这会释放等待的服务器以读取客户端写入的内容。一旦读取,服务器将 write sem 设置回 0,并且下一个客户端开始写入。它挂在读取 sem 为 0 时释放的 semop 调用上。这个 semop 调用在一个线程中,我需要弄清楚如何在让主线程终止之前正确退出该线程。

这是我想做但不起作用的示例(睡眠假装是挂起的 semop 调用):

0 投票
4 回答
9776 浏览

windows - 如何等待/阻塞直到信号量值在 Windows 中达到 0

在 unix 上使用 semop() 函数,可以提供一个 sem_op =0 的 sembuf 结构。本质上,这意味着调用进程将等待/阻塞,直到信号量的值变为零。在 Windows 中是否有等效的方法来实现这一点?

我试图实现的具体用例是等到读者数量达到零后再让作家写。(是的,这是使用信号量的一种有点非正统的方式;这是因为对阅读器的数量没有限制,因此没有一组受限制的资源,而这正是信号量通常用来管理的)

关于 unix semop 系统调用的文档可以在这里找到: http ://codeidol.com/unix/advanced-programming-in-unix/Interprocess-Communication/-15.8.-Semaphores/