问题标签 [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 投票
8 回答
7518 浏览

c# - .NET 反向信号量?

也许是太晚了,但我想不出一个好的方法来做到这一点。

我已经开始了一堆异步下载,我想等到它们全部完成后再程序终止。这让我相信我应该在下载开始时增加一些东西,并在下载完成时减少它。但是,我该如何等到计数再次为 0?

信号量以相反的方式工作,因为当没有可用资源时阻塞,而不是在它们可用时阻塞(当计数为 0 时阻塞,而不是非零)。

0 投票
3 回答
58257 浏览

c - 在 Windows 上使用 C 中的线程。简单的例子?

我需要什么以及如何在 Windows Vista 上使用 C 中的线程?

你能给我一个简单的代码示例吗?

0 投票
0 回答
2298 浏览

linux - gdb 导致 sem_wait() 因 EINTR 错误而失败

从 Ubuntu 切换到 CentOS 5.4 后,我们遇到了一个奇怪的 GDB 行为。在调试器中运行应用程序会导致sem_wait()多次(5-10)次返回EINTR错误。

我安装了最新的 GDB 版本,但没有解决问题。我想这是由 GDB 发送的一些信号引起的,但我无法在信号处理程序中获得任何信息。

测试errnosem_wait()恢复等待没什么大不了的,我只是想知道是否有人对这种现象有解释。

0 投票
8 回答
31674 浏览

linux - 当将信号量减为零的进程崩溃时,如何恢复信号量?

我有多个用 g++ 编译的应用程序,在 Ubuntu 中运行。我正在使用命名信号量在不同进程之间进行协调。

以下情况外,一切正常:如果其中一个进程调用sem_wait()sem_timedwait()减少信号量,然后在它有机会调用之前崩溃或被杀死 -9 sem_post(),那么从那一刻起,命名的信号量是“不可用的”。

通过“不可用”,我的意思是信号量计数现在为零,并且应该将其增加到 1 的进程已经死亡或被杀死。

我找不到sem_*()可能告诉我上次递减它的进程已经崩溃的 API。

我在某处缺少 API 吗?

以下是我打开命名信号量的方法:

这是我减少它的方法:

0 投票
3 回答
4648 浏览

multithreading - Ada95 中的线程和信号量

如何在 Ada95 中使用线程?我可以使用哪些函数来创建、销毁、停止和启动它们?

如何在这种语言中使用信号量?

0 投票
1 回答
146 浏览

c++ - 如何在不指定信号量的资源计数的情况下创建 ReadWriteMutex?

ReadWriteMutex 的常用模式是使用信号量并让编写器循环获取所有资源:

这很好,除了您必须在信号量初始化期间指定资源计数并且随意选择 10 或 99999 的资源计数感觉不对。是否有更好的模式可以允许“无限”读者(不需要资源计数)?

0 投票
2 回答
7107 浏览

java - 使用java实现计数信号量

我怀疑互斥量和信号量之间的显着区别在于计数信号量支持超过一次的最大访问,因为互斥量一次最多只支持一次访问。

但是在执行如下操作时;

问题是对象的非静态 wait() 方法的调用。但是,我必须对类而不是对象实例应用同步,因为访问是在多个实例之间共享的。

如何解决 wait() 错误?我们在 java 中是否有另一种方法,或者我们必须自己实现 wait()?

0 投票
11 回答
110360 浏览

linux - 删除类 UNIX 系统上的所有 SYSTEM V 共享内存和信号量

如何在类 UNIX 系统(例如 Ubuntu)上使用单个命令删除所有未使用的信号量和共享内存?

0 投票
2 回答
1334 浏览

msmq - MSMQ - 快速生产者/慢消费者

我对消息传递(使用 MSMQ)有问题,这是快速生产者/慢消费者的一种变体。有没有办法在私有 MSMQ 队列中获得未使用的消息计数?我想用它来限制生产者。

我想在 MSMQ 中使用信号量范式,其中生产者应用程序仅在未完成的消息计数小于指定数量时才发送消息。

本质上,我想做类似以下的事情

我的配置:Win XP/2003 和 MSMQ 3.0

0 投票
2 回答
1238 浏览

c++ - WaitForSingleObject 在 XP 中获得他的信号量,但在 Vista 中没有

以下代码在我的 XP SP2 机器上运行良好,但在我的 Vista 机器上运行时,对 WaitForSingleObject 的调用会无限期地等待:

这是释放信号量的线程:

命名信号量是最近添加的,没有任何好处。在此之前,线程只是与其匿名信号量共享 ghSemaphore。没有明显区别。有谁知道为什么这个二进制文件(在 VC6 的 XP 机器上编译,Express Edition fwiw)在 Vista 中不起作用?正如我上面所说,WaitForSingleObject 调用永远不会结束。

谢谢!