Tag: 信号量

向父进程发信号通知子进程已完全初始化

我正在启动一个公开WCF端点的子进程。 如何从子进程向父进程发出信号,表明子进程已完全初始化并且现在可以访问端点? 我想过为此目的使用信号量,但无法弄清楚如何实现所需的信号。 string pipeUri = “net.pipe://localhost/Node0”; ProcessStartInfo startInfo = new ProcessStartInfo(“Node.exe”, “-uri=” + pipeUri); Process p = Process.Start(startInfo); NetNamedPipeBinding binding = new NetNamedPipeBinding(); var channelFactory = new ChannelFactory(binding); INodeController controller = channelFactory.CreateChannel(new EndpointAddress(pipeUri)); // need some form of signal here to avoid.. controller.Ping() // EndpointNotFoundException!!

信号量优先

我知道System.Threading命名空间中的Semaphore类,但我不知道它是否允许等待线程具有不同的优先级。 如果两个线程正在等待打开的插槽,是否有办法允许具有更高优先级的线程使第一个打开的插槽可用?

我是否需要配置SemaphoreSlim

根据文件: “ SemaphoreSlim不使用Windows内核信号量”。 是否有SemaphoreSlim使用的特殊资源,当不再使用SemaphoreSlim时调用Dispose很重要?

使用嵌套的异步调用进行锁定

我正在开发一个multithreadingWindowsPhone8应用程序,该应用程序在异步方法中具有关键部分。 有没有人知道在C#中正确使用信号量/互斥量的方法,其中你使用嵌套的异步调用,其中内部方法可能获取它已经获取了调用堆栈的相同锁? 我认为SemaphoreSlim可能是答案,但看起来它会导致死锁。 public class Foo { SemaphoreSlim _lock = new SemaphoreSlim(1); public async Task Bar() { await _lock.WaitAsync(); await BarInternal(); _lock.Release(); } public async Task BarInternal() { await _lock.WaitAsync(); // deadlock // DO work _lock.Release(); } }

什么是互斥锁和信号量在c#中? 我们需要实施的地方?

C#中的互斥锁和信号量是什么? 我们需要实施的地方? 我们如何在multithreading中与他们合作?

如何让UI线程等待信号量,但处理其他调度程序请求? (就像MessageBox.Show本身一样)

通常,当UI线程调用MessageBox.Show()类的东西时,当前代码执行不会继续,直到用户单击OK,但程序将继续运行在UI线程上调度的其他代码。 在这个问题中 ,我遇到了一个问题,就是在一次调用UI线程上调度了太多的委托。 我想在继续执行之前暂停某些点。 在我的新error handling程序中,我使用信号量来确保一次只处理一个错误。 我发送一个MessageBox来提醒用户,当他们点击“确定”时,我释放信号量,允许处理下一个错误。 问题是它没有按预期运行。 如果同时发生两次对HandleError的调度调用,则第一次调用MessageBox.Show,第二次调用UI线程。 奇怪的是,对MessageBox.Show()的调度调用永远不会被执行 – 整个应用程序只是挂起 – 所以当用户单击“确定”时应该释放的信号量被永久锁定。 这个解决方案缺少什么? private static ConcurrentDictionary QueuedErrors = new ConcurrentDictionary(); private static Semaphore Lock_HandleError = new Semaphore(1, 1); //Only one Error can be processed at a time private static void ErrorHandled(Exception ex) { DateTime value; QueuedErrors.TryRemove(ex, out value); Lock_HandleError.Release(); } private static bool […]

信号量实施

我想知道是否有办法在C ++(或C#)中实现信号量,任何有帮助的库。 我尝试使用OpenMP,但我无法实际阻止线程,而是我不得不忙着等待,如果/当我没有足够数量的线程时会导致死锁。 首先,我正在寻找一个可以让我阻止/生成/杀死我的线程的库。 其次,有没有已经实现信号量的库? 最后,当我被介绍到信号量的上下文时,我发现它非常有用(也许我错了?)但我没有看到很多库(如果有的话)实现它。 我熟悉OpenMP,环顾英特尔的TBB,C#线程。 但是在这些中我都没有明确地看到信号量。 那些信号量不像我想的那么实用吗? 还是他们难以实施? 还是我没有意识到? PS 信号量可以跨平台实现吗? 因为它们可能与操作系统有关。

保证信号量顺序?

.NET Semaphore类的文档声明: 没有保证的顺序,例如FIFO或LIFO,其中被阻塞的线程进入信号量。 在这种情况下,如果我想要保证订单(FIFO或LIFO),我的选择是什么? 这是不容易实现的事情吗? 我必须写自己的信号量吗? 我认为那会很先进吗? 谢谢, 史蒂夫

从应用程序运行一个实例

我有一个Windows应用程序(C#),我需要将其配置为当时从应用程序运行一个实例,这意味着一个用户单击.exe文件并运行应用程序并且用户没有关闭第一个实例正在运行的应用程序,需要运行下一个实例,因此它应该出现在第一个实例而不是打开新实例。 任何人都可以帮我怎么做? 提前致谢

.NET反向信号量?

也许现在已经太晚了,但我想不出一个很好的方法来做到这一点。 我已经开始了一堆异步下载,我想等到它们都在程序终止之前完成。 这让我相信我应该在下载开始时增加一些东西,并在它完成时减少它。 但那我怎么等到计数再次为0 ? 信号量以相反的方式工作,因为当没有可用资源时阻塞,而不是当它们全部可用时阻塞(当count为0而不是非零时为块)。