问题标签 [binary-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 投票
36 回答
627479 浏览

operating-system - 二进制信号量和互斥量之间的区别

二进制信号量和互斥量之间有什么区别还是它们本质上是一样的?

0 投票
1 回答
173 浏览

php - PHP 锁定进程直到唤醒或超时

我想要一个 PHP 脚本来锁定自己(即等待没有 CPU 使用,没有轮询),直到被其他 PHP 脚本唤醒或达到 X 秒的特定超时。

此外,我希望 IPC 以二进制信号量方式工作,但释放信号量的进程不会是获取它的进程。显然这对于​​ sem_release() 是不可能的:

sem_release()如果当前被调用进程获取,则释放信号量,否则生成警告。

获取锁的过程负责处理大量数据,无论谁释放信号量都表明它已准备好进行处理。让我们将 P1 命名为处理数据的进程,将 P2 命名为生成数据的进程,从而指示 P1 新数据可用于处理。当 P1 正在处理其他数据时,P2 可能会多次向 P1 提供新数据,但是当 P1 决定处理新数据时,所有数据都会被处理,这意味着 P1 不应在每次 P2 发出有新数据的信号时获取。如果在两者之间没有可用的数据,则 P1 的两次连续运行应该阻塞。

这就是我试图实现的原因:

我担心使用消息队列等其他方法可能会导致丢失某些事件(即循环直到队列为空以清除它)所以我想保持简单。

我只想使用 PHP,但可以假设是 Linux 主机。

0 投票
0 回答
78 浏览

c - 使用信号量强制流程切换来衡量流程切换的成本

我正在尝试衡量进程切换的成本,为此我正在尝试使用信号量。我很难弄清楚该怎么做。有人可以用算法或想法帮助我吗?现在我 fork,有两个 if 语句,一个用于 if pid==0,一个用于 pid>0。我将使用 CLOCK_MONOTONIC 来获取时钟测量值,但我不确定如何处理信号量本身。

0 投票
1 回答
143 浏览

multithreading - 信号量队列如何被多线程保护

在一次采访中,有人问我...

以上是信号量等待实现(从其他线程复制)。当多个线程尝试入队时(当它们未能获得锁时),队列 sem.L 如何受到保护?我们是否在更新队列之前锁定?

0 投票
1 回答
176 浏览

multithreading - 信号量基本操作

首先,如果这不是我的问题的正确位置,请原谅我。

我正在准备考试,这是给出的示例问题:

上一次考试给出的问题:

学生们决定见面并去看电影。学生们决定见面并去看电影。决定见面去看电影。他们以group_size为一组聚集在一起后,他们去买票。每个学生学生学生购买自己的票(成为客户)。有两个售票亭(每个售票亭有一名职员)。如果店员有空,它将在线为下一位顾客服务(一次一位顾客)。两个展位只有一条线。

使用信号量和对信号量的操作,同步两种线程类型:Student 和 Clerk。有 numStudents(默认 9)和 numClerks(默认 2)。考虑到凌晨展位上没有客户在线。从店员的角度来看(由您决定),您可以认为两位店员都已经在工作,或者他们都还没有到达(当第一位顾客出现时)。客户比 numStudents 多。给出所使用的每个信号量的类型、初始值,并简要说明其用途。如果布尔变量的使用可以被信号量代替,则不要使用它们。大约在同步之前,线程的可能执行伪代码可能是:

如果有人能帮我解决这个问题,我将不胜感激。

0 投票
1 回答
696 浏览

linux-kernel - 在进程和中断上下文中使用 Linux 中的自旋锁和信号量

如果我在中断上下文中使用信号量和互斥锁会发生什么?通常信号量用于同步机制。如果我在中断上下文中使用这个会发生什么?

我正在做一个关于 gpio 引脚的项目,当发生中断时,我必须在 ISR 中发送一个信号。我正在使用自旋锁。

如果我在 ISR 中使用信号量和互斥量会发生什么?

0 投票
1 回答
1863 浏览

c - 在 C 语言中使用 POSIX 在多个进程(不是线程,仅进程)之间共享二进制信号量

我正在使用 C 语言中的 POSIX 在多个进程(不是线程,仅进程)之间共享二进制信号量。如果我使用互斥体创建二进制信号量,

我只能在线程中使用它,但我想在进程之间共享。所以我的问题是,如何使用 posix 计数信号量制作二进制信号量?

0 投票
2 回答
4809 浏览

c - 如何将 POSIX 信号量值设置为 1?

我正在用 c 语言实现信号量。我有一个 POSIX 计数信号量。我想给它赋值。而且我不想使用等待或发布。我可以这样做吗?POSIX Semaphore 是否有类似“setValue”的功能?

0 投票
0 回答
90 浏览

c - 互斥锁或信号量以防止子线程在父线程的日志轮换期间访问文件?

我的程序有一个主线程和一堆子线程,除其他外,它们写入同一个日志文件。每天一次,主线程检查日志文件是否太大,然后将其归档、关闭并压缩。子线程在要写入日志时,会检查文件的 fd 是否不为空。如果有效,则继续写入日志,如果无效,则启动新的日志文件。问题是,由于并发性,一旦子线程将获得 fd,一切看起来都很好,但随后它被中断,主线程归档文件,并且当子线程恢复执行并尝试写入时日志,fd 不再有效并发生段错误。那么解决这个问题的最佳方法是什么?我考虑在主线程和执行 log_write 的子线程部分上使用相同的互斥锁。那应该可以解决这个问题,但我真的不想阻止多个子线程同时执行 log_write。当然,日志可能有点乱,但现在这对我来说不是问题。我只需要一种机制来防止子线程在日志归档过程开始后开始写入日志。这看起来像是信号量的情况吗?

0 投票
1 回答
523 浏览

concurrency - 这种带有二进制信号量的通用信号量的实现是否正确?

证明或反驳以下信号量的正确性。

有问题的信号量

以下是我对此的看法。好吧,如果有人实现了它,所以等待在信号之前先运行,就会出现死锁。程序将调用等待,递减计数,进入计数 < 0 条件并在门等待。因为它在门口等待,所以它不能前往等待之后的信号。所以在这种情况下,这可能意味着信号量不正确。

但是,如果我们假设两个进程正在运行,一个运行等待,另一个运行信号,那么如果第一个进程运行等待并在等待(门)处阻塞,那么另一个进程可以运行信号并释放原来的进程被阻止。因此,继续这个方案将使算法有效并且不会导致死锁。