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

macos - Mac OS X 上的 POSIX 信号量:sem_timedwait 替代方案

我正在尝试将使用信号量的项目(来自 linux)移植到 Mac OS X,但是某些 posix 信号量未在 Mac OS X 上实现

我在这个港口打的那个是sem_timedwait()

我对信号量了解不多,但从手册页sem_wait()看来似乎很接近sem_timedwait并且已实现

从手册页

sem_timedwait()
sem函数应锁定函数中 as 引用的信号量sem_wait()。但是,如果在
不等待另一个进程或线程
通过执行某个sem_post() 功能来解锁信号量的情况下无法锁定信号量,则应
在指定的超时到期时终止此等待

从我对信号量如何工作的有限理解来看,我认为这sem_timedwait()更安全,但我仍然应该能够使用 sem_wait()

它是否正确?如果不是我还有什么其他选择...

谢谢

0 投票
2 回答
15323 浏览

c - 信号量队列

我正在扩展信号量的功能。当我意识到我不知道实际信号量的实现并确保我的代码正确运行时,我遇到了障碍,我需要知道这一点。

我知道信号量的工作原理是在调用 sem_wait() 并且另一个线程当前将其锁定时阻塞正在等待它的线程。然后线程被阻塞,然后被放入该信号量的等待列表中。

我的问题与 sem_post() 上发生的情况有关。下一个线程是否从等待列表中拉出,设置为锁定线程,并允许解除阻塞?或者发布的计划完全不同?

谢谢!

0 投票
3 回答
492 浏览

multithreading - 关于信号量的问题

给定以下代码,您能弄清楚是什么原因导致“您输入 7 个字符”出现 3 次,尤其是最后一次?

测试输入/输出:

0 投票
2 回答
3098 浏览

linux - sem_post() 因有效信号量而失败

我有一个带有信号量的队列。尽管信号量本身是有效的,但在某些时候所有调用sem_post()总是返回“无效参数”错误

信号量是 C++ 对象的私有成员,它永远不会被删除,它也可以在 gdb 中检查。我sem_getvalue()在 - 值读取之前添加了sem_post()OK 然后它失败了sem_post()。有什么问题?

0 投票
3 回答
4167 浏览

c++ - 使用 pthread 来利用多个内核的问题

我正在使用 SDL 和 Pthread 用 C++ 开发光线追踪器。我在使我的程序使用两个内核时遇到问题。线程可以工作,但它们不会 100% 使用两个内核。为了接口 SDL,我直接写入它的内存 SDL_Surface.pixels,所以我认为它不可能是 SDL 锁定我。

我的线程函数如下所示:

注意:scene->renderPixel 是 const,所以我假设两个线程都可以从同一个内存中读取。我有两个工作线程在做这件事,在我的主循环中我使用:

注意:我也尝试过创建和加入线程而不是同步它们。我用“-lpthread -D_POSIX_PTHREAD_SEMANTICS -pthread”编译它,gcc 没有抱怨。

我的问题最好使用执行期间的 CPU 使用图来说明:( 来源:jopsen.dk执行期间的 CPU 使用率。

从图中可以看出,我的程序一次只使用一个内核,然后每隔一段时间在两者之间切换,但它永远不会将两者都驱动到 100%。我到底做错了什么?我没有在场景中使用任何互斥锁或信号量。我该怎么做才能找到错误?

此外,如果我将 while(true) 放在 scene->renderPixel() 周围,我可以将两个核心都推到 100%。所以我怀疑这是由开销引起的,但我只每 0.5 秒同步一次(例如 FPS:0.5),给定一个复杂的场景。我意识到告诉我我的错误可能并不容易,但是调试它的方法也很棒......我以前没有玩过pthreads......

另外,这可能是硬件或内核问题,我的内核是:

笔记:

0 投票
3 回答
3273 浏览

c - 为什么这段代码会出现分段错误?

运行此代码时出现分段错误。我无法弄清楚为什么会发生这种情况 - 任何人都可以看到可能的原因吗?(我已经获得并初始化了信号量的共享内存。)

我的代码:
0 投票
11 回答
105209 浏览

java - Java 中的互斥量和信号量是什么?主要区别是什么?

Java 中的互斥量和信号量是什么?主要区别是什么?

0 投票
4 回答
3164 浏览

synchronization - 信号量的共识数是多少?

(我认为)互斥体的共识数是 2。

信号量的共识数是多少(如在 pthread_sem_* 中)?

条件变量的共识数是多少(例如在 pthread_cond_* 中)?

0 投票
4 回答
2145 浏览

ipc - RE:Posix 和 System V IPC

  1. 消息队列、共享内存和信号量中哪个 IPC 最容易转换为网络 IPC,哪个最难。

  2. 将 System V 共享内存转换为网络 IPC 或将 Posix 共享内存转换为网络 IPC 会更容易吗

0 投票
3 回答
4131 浏览

concurrency - 寻找监视器诗句信号量的好类比/例子

监视器应该解决并发环境中的信号量问题。
我正在寻找一个使用监视器与信号量的好类比。

请使用类比信息:
4 个任务(TaskA、TaskB、TaskC、TaskD)
1 个变量varX

每个 Task 都想根据某个事件来操作varX 。