semaphore相关内容

使用队列和信号量进行并发和属性包装?

我正在尝试创建一个线程安全的属性包装器。我只能认为GCD队列和信号量是最快捷,最可靠的方法。信号量是不是性能更高(如果是真的),还是有另一个原因需要并发使用? 以下是原子属性包装器的两种变体: @propertyWrapper struct Atomic { private var值:值 private let队列= DispatchQueue(标签:“原子串 ..
发布时间:2020-10-07 20:31:53 移动开发

信号量以同步方式运行异步方法

在我的应用程序中,我使用了异步类方法,该方法需要同步运行。 据我了解,我应该使用信号量来完成此操作。使用信号量是我以前从未做过的事情,所以现在我正在努力将它们放在正确的位置。 我希望你们中的一些人可以在这里帮助我。 这是我的代码: -(void)CreateNewerEventInCalendar :(Event *)myEvent { [MyCalendar reque ..
发布时间:2020-09-28 22:35:03 移动开发

“信号灯超时时间段已到期”。 USB连接错误

我遇到此错误... 信号灯超时时间已过期。 在此行... ThePorts.ActivePort1.Open(); ...但是我只是偶尔得到它。当它发生时,它会一遍又一遍地发生。然后问题消失了好几个小时或几天,然后又回来了。 串行端口是连接了蓝牙的USB。 我认为这个人有一个非常相似的问题,但在C#中没有。 使用usbser.sys在SerialPort. ..
发布时间:2020-09-25 19:40:01 C#/.NET

使用信号量修复并发问题

我最近问了一个问题:链接此处关于将刷新令牌存储在我的autodesk-forge Web应用程序中的最佳方法.我目前将刷新令牌存储在一个只有一行和一列的SQL数据库中,其中包含刷新令牌.有关令牌的步骤如下: 用户登录时,将调用GET方法以从数据库中检索最新令牌. Returndata.php只需连接到SQL DB并从表中检索行.获取方法代码: function getRefreshTo ..
发布时间:2020-09-14 05:58:13 PHP

使用信号量在Java中实现循环屏障

问题如下,因为仅使用down()调用了屏障,所以它将等待n个线程到达,然后在关键区域中一起执行所有n个线程,现在如何我是否通知调用 barrier.down 的线程可以继续运行.我尝试在 phase2()之后添加 notifyAll(),但这不起作用.帮助? :) public class cyclicBarrier { private int n; private int ..
发布时间:2020-07-20 20:37:47 Java开发

sem_timedwait在RedHat Enterprise Linux 5.3及更高版本上不正确支持吗?

在带有pthreads sem_timedwait的RedHat Enterprise Linux系统上,我们看到了奇怪的行为.仅从5.3版开始. 当我们使用sem_init在后台线程上创建信号量时,不会返回任何错误.当我们执行sem_timedwait时,我们会立即返回errno = 38(ENOSYS),表明它不受支持. 如果我们在主线程上执行相同的操作,则它将按预期工作,并且不会 ..
发布时间:2020-07-06 01:20:08 服务器开发

如何限制异步IO任务到数据库的数量?

我有一个id's列表,我想从数据库中并行获取每个id的数据.我的以下ExecuteAsync方法以非常高的吞吐量被调用,对于每个请求,我们都有500 ids左右的数据,我需要为其提取数据. 所以我得到了下面的代码,在其中循环遍历ids的列表,并并行地对每个id进行异步调用,并且效果很好. private async Task> ExecuteAsync(IList ..
发布时间:2020-07-03 20:13:37 C#/.NET

如何正确使用PHP5信号灯?

我有这个功能,试图从缓存中读取一些值.但是,如果值不存在,则应调用备用源API并将新值保存到缓存中.但是,服务器非常过载,几乎每次不存在值时,就会创建一个请求(许多API调用),并且每个请求都会将新值存储到缓存中.但是,我想要的是能够多次调用API,但是只有一个进程/请求能够将其存储在缓存中: function fetch_cache($key, $alternativeSource) { ..
发布时间:2020-07-03 02:31:49 PHP

如何撤消对信号量的最新操作SEM_UNDO?

我的问题: A,B-信号灯. 过程是循环的: 等待A> = 1,递减A 进行一些计算 增加B. 回到1. 目标:进程终止后,我需要将A的减量等于B的增量. 所以我知道我将在1中添加标志SEM_UNDO,但是它将撤消该进程对A所做的每个减量.当进程达到4.时,如何从1.撤消/撤消SEM_UNDO? 解决方案 好的,当我想到将问题“撤消" SEM_UNDO而不是“ ..
发布时间:2020-06-26 19:13:45 服务器开发

如何终止正在等待信号量操作的线程

我正在编写一个程序,该程序使用ipc的共享内存和信号灯.有一个主服务器进程创建共享内存和信号灯.任何数量的客户端进程都可以连接到共享内存,并在允许时对其进行读写.信号量提供了阻止机制来控制读取和写入.一切正常,除非我尝试终止客户端.用于访问共享内存的信号量块在线程中,并且在进程终止时,我无法释放信号量块,因此线程可以正确退出.我将如何处理?这是针对Linux的. 具体来说,有一个shm和两个 ..
发布时间:2020-06-26 19:11:26 服务器开发

信号量是IPC机制吗?

信号量是IPC机制吗? 解决方案 是的,在许多平台上,信号量可以跨进程同步.为此,您将使用“命名"信号灯-多个进程通过名称访问对象,类似于文件系统对象. 在POSIX中,您可以通过sem_open()创建命名信号量.对于未修饰的信号量,如果sem_init()的第二个参数非零,则它可以是进程间的,尽管我不确定确切地说,未命名的进程间信号量应该如何工作. 请注意,在某些系统上,如 ..
发布时间:2020-06-26 19:06:32 其他开发

我如何防止“最大程度"的使用?的CPU:同步方法异步调用多个工作程序&使用SemaphoreSlim进行节流?

我目前正在优化现有的,非常慢的和超时的生产应用程序. 没有任何选项可以重写. 简而言之,这是WCF服务,当前依次调用其他四个“工作者" WCF服务.任何一个工人服务都不依赖于另一个人的结果. 因此,我们希望一次全部调用它们(而不是顺序调用).我要重申,我们没有重写它的奢侈. 优化涉及使其一次调用所有工作程序服务.这是想到异步的地方. 我在异步编程方面的经验有限,但是对于我的解决方 ..
发布时间:2020-06-21 19:07:24 C#/.NET

用嵌套的异步调用锁定

我正在开发一个多线程WindowsPhone8应用程序,该应用程序在异步方法中具有关键部分. 在使用嵌套异步调用的情况下,有人知道在C#中正确使用信号量/互斥锁的方法吗?在这种方法中,内部方法可能会获取与调用堆栈中已获取的锁相同的锁?我以为SemaphoreSlim可能是答案,但看起来会导致死锁. public class Foo { SemaphoreSlim _lock = ..
发布时间:2020-06-21 19:04:37 C#/.NET

SemaphoreSlim(.NET)是否阻止同一线程进入块?

我已经阅读了SemaphoreSlim的文档,则SemaphoreSlim将限制一段代码一次只能由1个线程运行. SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1, 1); 但是,它并不表示是否阻止相同线程访问该代码.这带来了异步并等待.如果在一个方法中使用了await,则控件将离开该方法,并在完成任何任务或线程时返回.在我的示例中,我使用 ..
发布时间:2020-06-21 19:02:08 C#/.NET

信号量苗条等待优先级

我想知道SemaphoreSlim在调用Await时是否具有优先级. 我什么都找不到,但是也许有人以前做过类似的事情. 想法是,如果需要的话,可以稍后以更高的优先级在信号量上调用await,它将使await首先返回. 解决方案 否,SemaphoreSlim中没有优先级,无论您使用的是同步锁定还是异步锁定. 很少需要异步锁的优先级.通常,如果您退后一步,放眼大局,这些问题 ..
发布时间:2020-06-21 18:58:58 C#/.NET

C#-使用ContinueWith进行错误传播

我是一名线程新手,正尝试使用 SemaphoreSlim 允许我同时运行一定数量的长任务。 我的挑战是,按照我写的方式,任何异常都无法正确捕获。 这是我的一个非常简化的示例当前代码: public void ThreadTest() { try { var currentTasks = new List(); SemaphoreSlim maxThr ..
发布时间:2020-06-11 00:10:17 C#/.NET

餐饮哲学家饥饿的可能性

如果需要保证满足以下所有条件,我需要检查我的解决用餐哲学家问题的算法: 没有饥饿的可能性。 我正在使用信号量。 这是我的代码(算法): while(true) { //他饿了 pick_chopsticks(i); //他在吃饭... drop_chopsticks(i); //他在想 } // ... void pickle_c ..
发布时间:2020-06-03 20:30:24 其他开发