semaphore 相关问题

信号量是一种同步原语,用于跟踪有限数量的资源中有多少可用。

为什么使用信号量会减慢我的 Go 程序速度

我制作了一个程序,使用 goroutine 抓取网站的所有页面: 函数主() { 开始 := 时间.Now() knownUrls := getKnownURLs(os.Getenv("SITEMAP_URL")) var wg 同步。

回答 1 投票 0

在 Linux 内核中更改网络接口时为什么要使用 rtnl_lock?

我有一个有点愚蠢的问题,但我想知道为什么我们需要序列化有关特定接口更改的操作? https://elixir.bootlin.com/linux/v6.10-rc7/source/net/core/

回答 1 投票 0

使用信号量打印出特定的模式

给出这些方法: void* thread1Func(void* p) { 而(1){ printf("A"); } } void* thread2Func(void* p) { 而(1){ printf("B"); } } 无效*

回答 1 投票 0

为什么使用信号量解决方案会合不能泛化(我们使用屏障代替)?

对于集合点问题,我们需要同步两个线程,这是一个经典的解决方案: a到达 = S(0); b到达= S(0); 线程A: 而(真){ 做一点事(); aArrived.signal(); 巴...

回答 2 投票 0

多线程程序未按预期运行

我试图了解信号量,阅读 Allen B. Downey 的《信号量小书》。 其中有一个谜题: 概括交会解。每个线程都应该运行 关注...

回答 1 投票 0

aiohttp.client_exceptions.ClientConnectorError:无法连接到主机:443 ssl:default [信号量超时期限已过期]

我在代码中使用了 asyncio 和 aiohttp,它在我的工作笔记本电脑上运行得非常好。然而,当我从工作笔记本电脑上在虚拟机上运行它时,我遇到了这个错误“信号量超时

回答 1 投票 0

如何使用 Java 上的 Swing 中的 JProgressBar 制作进度条?

我是并行计算的初学者。我一直在 Apache Netbeans 中从事 Java 工作。我最近的工作是关于信号量的,使用 Semaphore 和 Thread Java 类,从这个意义上说,我必须制作一个

回答 1 投票 0

多线程中的任务顺序

我是线程和多线程的新手。(Win 套接字 API) 我试图通过适当的同步来实现两个线程中的任务序列。 不。线程 2 的数量:Thread_A 和 Thread_B 线程_A{ ...

回答 1 投票 0

如何在复制的mysql和集群服务器中获取排他锁?

我有这样的场景: 我的 php Web 应用程序部署在集群环境中,它使用带有 galera 的复制 mariadb 数据库。 它必须获取数据库行资源的排他锁...

回答 1 投票 0

关于 POSIX 信号量以及不同 Linux 发行版之间兼容性的问题

如果我在系统根目录创建一个 POSIX 信号量,如下所示: #包括 #包括 #包括 std::string semName = "/MySemaphore" ; int 我...

回答 1 投票 0

为什么sem_t在64位linux中是32字节?

sem_t在64位linux中是32字节,但是使用futex实现,8字节就足够了(glibc sem_post),是真的吗?如果这是真的,为什么要浪费字节呢? 实际上我想使用自定义信号量

回答 2 投票 0

C++20:如何超时等待原子对象?

C++20 std::atomic 有 wait 和 notify_* 成员函数,但没有 wait_for/wait_until。 std::atomic 的 Microsoft STL 实现使用 WaitOnAddress(当操作系统足够新时)。还有...

回答 1 投票 0

为什么 vkAcquireNextImageKHR() 永远不会阻塞我的线程?

我正在使用 Vulkan 图形 API(通过 BGFX)进行渲染。我一直在测量我的通话花费了多少(挂钟)时间。 我不明白的是 vkAcquireNextImageKHR() 总是很快,并且

回答 1 投票 0

根据主循环设置的变量值立即中断辅助线程循环

我在 C++ 中遇到并发问题,我正在努力寻找最佳解决方案。我有两个线程:一个是主程序,另一个负责控制灯...

回答 1 投票 0

POSIX 标准和信号量语义

我正在尝试理解信号量的语义。 这是一些代码: #包括 #包括 #包括 #包括 #包括 我正在尝试理解信号量的语义。 这是一些代码: #include <semaphore.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> sem_t sem; void *helper(void *arg) { sem_wait(&sem); printf("helper woke up\n"); } int main() { sem_init(&sem, 0, 0); pthread_t tid; pthread_create(&tid, NULL, helper, NULL); sleep(1); sem_post(&sem); sem_wait(&sem); printf("main woke up\n"); exit(0); } 这里 main 创建一个辅助线程,休眠一秒钟以(几乎)确定辅助线程已运行并等待信号量,然后尝试快速连续地发布并等待信号量。根据 POSIX (https://pubs.opengroup.org/onlinepubs/009695399/functions/sem_post.html): 如果此操作产生的信号量值为零,则应允许阻塞等待信号量的线程之一从其对 sem_wait() 的调用中成功返回。 所以,我希望打印“助手醒来”。但是,如果您实际上在 Linux 上运行此代码,通常会观察到“main 唤醒”,这意味着默认情况下 Linux 上的信号量是允许不公平的。 我的问题是:为什么允许这种行为?是的,你可以说“它更容易实现”,但这并不能解释为什么信号量是用这些特定的语义设计的。 在其他地方,(https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html)它表示这种行为在某些情况下更可取。在什么情况下非公平信号量更好?我将不胜感激有关此主题的任何详细资料。 这样做的一个更好的方法是它减少了上下文切换。允许调用 sem_post() 的线程继续运行,而不必恢复在 sem_wait() 中阻塞的线程。 当调度程序决定解除哪个线程的阻塞时,主线程已调用 sem_wait()。然后它选择要解除封锁的服务员。然后,它可以根据调度优先级(如引用段落的其余部分所述)或任意选择。并且它可能会选择主线程以避免上下文切换。

回答 1 投票 0

如果信号量上有服务员,为什么线程可以向自身发送消息?

这是我为理解信号量语义而编写的一些代码: #包括 #包括 #包括 #包括 #包括 这是我为理解信号量语义而编写的一些代码: #include <semaphore.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> sem_t sem; void *helper(void *arg) { sem_wait(&sem); printf("helper woke up\n"); } int main() { sem_init(&sem, 0, 0); pthread_t tid; pthread_create(&tid, NULL, helper, NULL); sleep(1); sem_post(&sem); sem_wait(&sem); printf("main woke up\n"); exit(0); } 为什么打印这个 main woke up 而不是这个? helper woke up 如果我们查看手册页,就会发现 如果信号量的值因此变得大于零,那么 在 sem_wait(3) 调用中阻塞的其他进程或线程将被唤醒并继续锁定信号量。 那么为什么允许主线程而不是辅助线程继续进行呢? 我在 Linux 上尝试了这段代码,得到了和你一样的结果。 但是当我使用gdb一步步调试这段代码时,我发现终端上打印了helper woke up,然后主线程将永远等待。 所以我认为这可能是一个未定义的行为,因为主线程永远不会进入 printf 函数,并且 main 函数永远不会退出。所以可能会涉及到一些奇怪的系统机制。 你可以删除主函数中最后一个sem_wait(&sem);,就会得到这样的结果。 helper woke up main woke up

回答 1 投票 0

命名信号量不会像进程之间的同步中假设的那样工作

给定写入器和读取器代码如下,该程序将无法按预期工作: 预期行为:在我们启动 writer 后,通常在 2 秒后,我们从另一个术语启动 reader...

回答 1 投票 0

Javascript 信号量/测试和设置/锁定?

Javascript 中有原子测试和设置、信号量或锁之类的东西吗? 我有 javascript 通过自定义协议调用异步后台进程(后台进程实际上运行......

回答 8 投票 0

为什么信号量为空== 0但不阻塞?

C 中的经典生产者-消费者问题。 #包括 #包括 #包括 int 缓冲区 = 0; sem_t *互斥锁,*满,*空; 无效*生产者(无效*参数){ ...

回答 1 投票 0

信号量动态调整大小C#

我正在尝试使用信号量来控制可以同时运行的作业实例数。虽然使用等待方法相当简单,但我也希望该值可以在运行时配置,所以

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.