问题标签 [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 回答
1996 浏览

.net - 关于.Net中的信号量类

我需要将资源分配给线程数,所以我使用信号量来处理所有这些,然后我意识到在进程间锁定资源的情况下使用信号量。我用谷歌搜索并找到了进程内信号量的一些实现并使用了该类,但它有一些奇怪的错误。

现在我的问题是我应该使用点网信号量类吗?无论如何我可以在进程中创建信号量并降低进程间的成本(内部管理)

0 投票
3 回答
7149 浏览

javascript - javascript 临界区或信号量问题

我有上面的代码。我有一个主循环,它在给定的时间间隔进行更新。问题是我已经意识到它进入了我用变量 this.criticalSection 分隔的“关键部分”。

从萤火虫我得到消息“在关键部分”+索引和“关键部分”+索引以正确的顺序,但ajax请求仍在处理中。但是我收到具有相同索引的请求,我真的不知道在哪里寻找问题。

javascript 中的信号量或关键部分是否有任何内置功能?

0 投票
4 回答
4303 浏览

ipc - 信号量是 IPC 机制吗?

信号量是 IPC 机制吗?

0 投票
3 回答
2608 浏览

c - 在 Solaris 上运行的此代码中,信号量 func semctl() 出现总线错误

这是我对信号量和线程的第一次尝试。我根据示例和网上找到的手册页构建了这段代码。我对这段代码有两个疑问。

  1. 为什么每次尝试 semctl 时都会出现总线错误(我知道这是问题的根源,因为没有打印调试行 3)以及如何防止它?

  2. 尽管删除了 semctl(),为什么我无法获得对关键部分的锁定?

我正在尝试执行以下代码:

注意:我在建议后在代码中添加了以下内容:

还添加了以下内容:

将 semctl 行更改为

并进行了所有 rc 检查:

semctl() 行仍然没有成功执行。errno 现在状态:权限被拒绝

更新:我可以使用以下更改摆脱“权限被拒绝”错误:

现在,新问题是,我无法在控制台上打印“abc”。该程序只打印“a”并挂起。不知道为什么。

最终更新:我在解锁代码中搞砸了:我使用 -1 而不是 1 这是新代码:

我感谢大家的帮助和耐心。

0 投票
2 回答
3687 浏览

c# - 使用信号量保护队列的问题

我正在使用以下代码来限制资源的使用。

偶尔(成功运行 3-4 天后)我得到队列空异常或返回的对象被发现为空。

我想知道我是否只限制 5 个线程进入这个 Get 方法,这是怎么发生的。

在调用 GetConnection 的地方,ReleaseConnection 也肯定是在 finally 块中调用的。

每次通话时,我也记录没有。队列中的资源。队列数似乎永远不会超过 5。

我的问题是,我是否需要使用锁/监视器来同步对队列(资源实例)的访问?

0 投票
2 回答
21564 浏览

c - 如何在 C 中多次调用 sem_open?

我在让信号量在基于 Linux 的 C 系统上工作时遇到了很多困难。

我的申请流程是这样的:

  1. 申请开始
  2. 申请分叉到孩子/父母
  3. 每个进程使用sem_open一个通用名称来打开信号量。

如果我在分叉之前创建信号量,它工作正常。但是,要求阻止我这样做。当我第二次尝试调用sem_open时,我收到“Permission Denied”错误(通过errno)。

有可能以任何方式做到这一点吗?或者有什么办法可以在一个进程中打开信号量,并使用共享内存机制与子进程共享?

0 投票
3 回答
1632 浏览

java - Java 线程内部结构

我研究 Java 的内部结构已经有一段时间了。我很想学习和理解 Java 中线程/锁定是如何发生的。

因此,为了访问同步方法或同步块,线程必须首先获取对象上的锁。所以,现在,这就是我需要更多光的地方。

那么,每当线程获取对象上的锁时,它是否会在内部增加信号量的值?如果答案是肯定的,那么让我们来看看这个场景。

因此,假设有两个线程:Thread 1 和 Thread 2。假设Thread1首先进入 method_1,因此首先获得了 xyz 上的锁。而且,现在说,Thread2进入 method_2 并尝试获取 xyz 上的锁定。会发生什么?(对我来说,Thread2 将被阻塞,因为它发现对象的信号量值>0)

让我知道我的推理是否正确。

0 投票
10 回答
296131 浏览

concurrency - 锁、互斥量和信号量有什么区别?

我听说过这些与并发编程有关的词,但是锁、互斥量和信号量有什么区别?

0 投票
9 回答
36508 浏览

c++ - 在什么情况下,您在 C++ 中使用信号量而不是互斥量?

在我阅读的有关多线程的所有资源中,与信号量相比,互斥锁更常被使用和讨论。我的问题是你什么时候在互斥锁上使用信号量?我在 Boost 线程中看不到信号量。这是否意味着这些天不再使用信号量了?

据我了解,信号量允许多个线程共享资源。这只有在那些线程只读取资源而不是写入时才有可能。它是否正确?

0 投票
5 回答
10874 浏览

c++ - ReleaseSemaphore 不释放信号量

(简而言之:main() 的 WaitForSingleObject 挂在下面的程序中)。

我正在尝试编写一段代码来分派线程并等待它们在恢复之前完成。我没有每次都创建线程,这很昂贵,而是让它们进入睡眠状态。主线程在 CREATE_SUSPENDED 状态下创建 X 个线程。

同步是使用以 X 作为最大计数的信号量完成的。信号量的计数器被归零,线程被分派。线程执行一些愚蠢的循环并在它们进入睡眠之前调用 ReleaseSemaphore。然后主线程使用WaitForSingleObject X 次来确保每个线程都完成了它的工作并且正在休眠。然后它循环并再次执行所有操作。

有时程序不会退出。当我对程序进行喙时,我可以看到 WaitForSingleObject 挂起。这意味着线程的 ReleaseSemaphore 不起作用。没有任何东西是 printf'ed 所以应该没有出错。

也许两个线程不应该同时调用 ReleaseSemaphore,但这会使信号量的目的无效......

我只是不明白...

感谢您接受其他同步线程的解决方案!