semaphore相关内容

如何在C++中通过POSIX和信号机使用ROS服务和串口通信?

我是C/C++中的并发和并行编程新手,所以我的项目需要一些帮助。 我希望在C++中使用POSIX和信号量运行多个进程。因此,程序的结构应该如下所示。 第一个I打开串口(Raspberry PI 4的串口通信)。在打开串口时,两个进程正在运行 第一个是自动运行的主进程,并执行以下操作: 该线程请求奥多姆更新(来自微控制器的压力和IMU)并发布它们。此外,每隔0.3秒检查一次调制解调器收件箱,如果 ..
发布时间:2022-08-15 18:37:44 C/C++开发

受控并行任务执行使用什么

我在一些对象上运行并行任务,为了加快速度,它们并行运行4个。 现在有了一个新要求,我需要执行一项任务,该任务需要一次执行一个任务,而其他任务必须等待(其他任务不能执行其他任务)。 我无法使测试同步。 请检查下面的图像,以便更好地解释。 已经完成了一次执行一个对象,但我想使用一个信号量来等待开始和结束时的4个对象。 问题是信号量并不是为了让另一个信号量进入而等到所有信号量都完成。 ..
发布时间:2022-05-11 20:44:23 C#/.NET

如何在一台服务器上只允许创建1个命名信号量?

我想在我的应用程序中创建一个信号量,如果应用程序的另一个实例正在运行并且已经创建了信号量,则创建将失败(有一个明显的异常)。因此每台服务器只有一个。 我希望在整个系统中只保留一个,而不仅仅是CLR。但我不希望它跨多个服务器(或VM)保留。即我希望该应用程序能够在两台不同的服务器上运行。 这可能吗?如果是,如何? 谢谢-Dave 推荐答案 您可以为此使用System.T ..
发布时间:2022-05-11 20:37:08 C#/.NET

.NET-如何使用信号灯将一段代码一次仅限制为200个线程

我已经开发了一个.Net核心Web API,并且有一个场景,其中我有一个包含大约1000条记录的列表,其中每条记录都将被循环并调用第三方API。第三方API有一个限制,同时只能发送200个请求。因此,我使用了SemaphoreSlim,并将使用此代码块的线程数量限制在200个,并且运行良好。 如果有多个用户或多个请求进入此终结点,则第三方API将引发错误。 如何将SemaphoreSl ..
发布时间:2022-05-11 20:30:48 其他开发

关键部分与计算信号量有什么关系?

Some people说您应该使用互斥锁来保护共享资源(即临界区),而信号量应该用于发送信号,反之亦然。因此,据我所知,信号量与临界区无关。 然而,包括Wikipedia在内的许多其他文章都指出信号量是用来解决临界区问题的。说二进制信号量解决临界区问题是否更正确,因为它们基本上充当互斥锁,而计算信号量则是另一回事,不属于“资源保护器”类别? 推荐答案 计数信号量可用于资源保护,但 ..
发布时间:2022-05-11 20:26:54 其他开发

信号量块,尽管它不是满的

我目前正在尝试优化一个旧的、编写得非常糟糕的类,它处理大量数据,因此很容易花费数小时来运行一组数据。收集数据已经花费了很多时间,这是我在这里试图改进的地方。我知道这是相当难闻的代码,但这只是一个测试,如果这能改善什么的话,所以请只关注这个问题: 我尝试了SemaphoreSlim和Semaphore以减少并发运行的任务数量。我的数据集将生成大约70个任务,这可能会导致线程匮乏和整体性能下降。至少 ..
发布时间:2022-05-11 20:18:28 C#/.NET

如何防止Perl脚本多次并行运行

我有一个可能会运行很长时间的脚本。在Linux上。当它运行时,当被相同或不同的用户第二次调用时,它应该检测到这一点并拒绝运行。我正在试图弄清楚如何创建一个合适的信号量,即使进程因某种原因而终止,它也会被清除。 我遇到了How to prevent PHP script running more than once?哪些当然可以应用,但我想知道在Perl中是否可以更好地实现这一点。 例如,P ..
发布时间:2022-05-11 20:13:16 服务器开发

Php不等待sem_Acquire?

不是特定的代码问题,而是更一般的代码问题。我正在尝试使用工作项目中的信号量来限制可以同时访问某些进程的用户数。 根据我的理解,如下: $iKey = ftock($sSomeFileLocation,'sOneCharacterString'); //Generate the key if($sem_id = sem_get($iKey)){ ..
发布时间:2022-05-11 19:59:45 PHP

为什么sem_open在没有共享内存的情况下使用fork()?

这个程序可以工作(我测试了它),即使信号量不在共享内存中。注意我是如何在fork()之前创建一次变量的。 另一方面,使用sem_init()创建的信号量需要在共享内存中才能工作。但它仍然是sem_t结构,为什么不需要共享内存? sem_t结构的内容有什么不同吗? sem_t *s = sem_open("mysemaphore1", O_CREAT, 0600, 0); if (fo ..
发布时间:2022-05-11 19:54:18 服务器开发

SemaphoreSlim的暂停是否违背了它自己的目的?

semaphore的真正力量是: 限制可以访问资源或池的线程数 并发资源 这是可以理解和清楚的。 但我一直没有机会处理Wait的重载,它接受超时整数-这似乎允许多个线程进入临界区,尽管我已显式设置信号量,不允许一次超过一个线程: private readonly SemaphoreSlim _mutex = new SemaphoreSlim(1); private vo ..
发布时间:2022-05-11 19:38:29 C#/.NET

Java公平信号量

我正在尝试理解这个旧考试任务的答案,在这个考试任务中,学生应该使用Java重入锁来实现公平的二进制信号量。我不明白这些计数器的意义: int next = 0; int nextToGo = 0; int myNumber; 它在对任务的描述中说:“您可以假设程序中最多有20个线程使用信号量。此外,在程序的一次运行中最多执行1000万个信号量操作。” 在任务的解决方案中,它说:“每个试 ..
发布时间:2022-05-11 19:29:11 Java开发

WebView2在异步任务中的并行使用

我有一个简单的默认Windows桌面表单Form1和一个按钮btn_Go作为测试。 我想运行多个并行的WebView2实例,并处理呈现页面中的html代码。 要并行运行WebView2,我使用了SemaphoreSlim(设置为并行2)。另一个SemaphoreSlim用于等待WebView2呈现文档(有一些时间延迟)。 但我的代码落在await webBrowser.EnsureCore ..
发布时间:2022-05-11 19:10:28 C#/.NET

如何在.Net Core API项目中跨多个线程限制对HttpClient的所有传出异步调用

我正在设计一个.Net核心Web API,它使用一个我不能控制的外部API。我找到了一些关于堆栈溢出的很好的答案,它们允许我在同一线程中使用信号量来限制对这个外部API的请求。我想知道如何最好地将这种限制扩展到应用程序范围,而不是只针对特定的任务列表进行限制。我一直在学习HttpMessageHandler,这似乎是拦截所有传出消息并应用节流的一种可能方式。但我担心的是我可能不理解的线程安全和锁定 ..

浴室同步和线程队列

对于家庭作业,我们遇到了卫生间同步的问题。我一直在努力想办法从哪里开始。我想做什么,当一个人进入洗手间(PersonEnterRestrrom函数),如果他们是女性,并且没有男性在洗手间,他们进入,如果不是,他们进入排队等待女性。我也想为男人做同样的事情。我试图实现一个包含线程的队列,但无法使其工作。然后在PersLeavesRestRoom函数中。当一个人离开时,如果浴室里没有人,另一个人就会开 ..
发布时间:2022-05-11 18:28:32 C/C++开发

Java信号量最大?

有没有办法知道信号量对象在其生命周期中曾经拥有的最大许可数量? 我们按如下方式进行初始化: Semaphore sem = new Semaphore(n); 有时我们获得,有时我们释放我们所获得的。但在某些情况下,我们需要发放比我们获得的更多的许可证,以增加许可证的数量。有没有办法知道此信号量中曾经出现过的最大许可数? 推荐答案 信号量本身不跟踪其生存期内的最大值。在它周围 ..
发布时间:2022-05-11 18:19:21 Java开发

将两个子进程与c#中的信号量同步

我必须创建一个程序来同步两个进程,每个进程只打印一个字母,以便每当我们观察程序的输出时,"A"和"B"之间的差值不大于2。 因此这将被接受: BAABBAABBABA 这不是因为它打印4个B而只打印2个A: ABBABB 因此,对于初学者,我决定使用POSIX信号量。 我创建了两个信号量,使用sem_open向它们授予所有权限 然后,我创建了两个子进程,并为每个子进程打开 ..
发布时间:2022-03-13 11:19:37 其他开发