Questions tagged «semaphore»

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






8
Java中是否有Mutex?
Java中是否有Mutex对象或一种创建对象的方法?我问是因为用1许可初始化的Semaphore对象对我没有帮助。考虑这种情况: try { semaphore.acquire(); //do stuff semaphore.release(); } catch (Exception e) { semaphore.release(); } 如果在第一次获取时发生异常,则catch块中的释放将增加许可,并且该信号量不再是二进制信号量。 正确的方法是吗? try { semaphore.acquire(); //do stuff } catch (Exception e) { //exception stuff } finally { semaphore.release(); } 上面的代码是否可以确保信号量是二进制的?




6
CountDownLatch与信号量
使用有什么好处吗 java.util.concurrent.CountdownLatch 代替 java.util.concurrent.Semaphore吗? 据我所知,以下片段几乎是等效的: 1.信号量 final Semaphore sem = new Semaphore(0); for (int i = 0; i < num_threads; ++ i) { Thread t = new Thread() { public void run() { try { doStuff(); } finally { sem.release(); } } }; t.start(); } sem.acquire(num_threads); 2:CountDownLatch final CountDownLatch latch …

7
信号量-初始计数有什么用?
http://msdn.microsoft.com/zh-CN/library/system.threading.semaphoreslim.aspx 要创建信号灯,我需要提供一个初始计数和最大计数。MSDN指出,初始计数为- 可以同时授予的信号量请求的初始数量。 虽然它指出最大数量是 可以同时授予的信号量请求的最大数量。 我可以理解,最大数量是可以同时访问资源的最大线程数。但是,初始计数的用途是什么? 如果我创建的信号量的初始计数为0,最大计数为2,则我的线程池线程都无法访问该资源。如果将初始计数设置为1,最大计数设置为2,则只有线程池线程可以访问资源。仅当我将初始计数和最大计数都设置为2时,两个线程才能够同时访问资源。那么,我真的对初始计数的重要性感到困惑吗? SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 2); //all threadpool threads wait SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 2);//only one thread has access to the resource at a time SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2, 2);//two threadpool threads can access the resource concurrently

3
需要了解SemaphoreSlim的用法
这是我的代码,但我不知道SemaphoreSlim在做什么。 async Task WorkerMainAsync() { SemaphoreSlim ss = new SemaphoreSlim(10); List<Task> trackedTasks = new List<Task>(); while (DoMore()) { await ss.WaitAsync(); trackedTasks.Add(Task.Run(() => { DoPollingThenWorkAsync(); ss.Release(); })); } await Task.WhenAll(trackedTasks); } void DoPollingThenWorkAsync() { var msg = Poll(); if (msg != null) { Thread.Sleep(2000); // process the long running CPU-bound job …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.