Tag: 信号量

Java中有互斥锁吗?

在Java中是否有一个互斥对象或创build一个? 我问,因为一个信号量对象初始化1许可证不帮助我。 想想这个案例: try { semaphore.acquire(); //do stuff semaphore.release(); } catch (Exception e) { semaphore.release(); } 如果在第一次获取时发生exception,catch块中的释放将增加许可证,而信号量不再是二进制信号量。 请问正确的方法是? try { semaphore.acquire(); //do stuff } catch (Exception e) { //exception stuff } finally { semaphore.release(); } 上面的代码是否确保信号量是二进制的?

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 = new CountDownLatch(num_threads); for […]

分叉的subprocess使用相同的信号量吗?

比方说,我创build一个信号量。 如果我分叉一堆subprocess,他们都会使用相同的信号量吗? 另外,假设我在里面创build了一个带有信号量的分叉结构。 所有的subprocess仍然使用相同的信号量吗? 如果没有,将存储结构+信号量共享内存允许subprocess使用相同的信号量? 我真的很困惑如何我的分叉subprocess可以使用相同的信号量。

条件variables与信号量

何时应该使用信号量,何时应该使用条件variables(CondVar)?

什么是Java中的互斥和信号量? 主要区别是什么?

什么是Java中的互斥和信号量? 主要区别是什么?

在Linux / UNIX上的多处理情况下可以使用互斥体吗?

这是一个面试问题。 在Linux / UNIX的多处理情况下可以使用互斥体吗? 我的想法:不,不同的进程有不同的内存空间。 互斥体仅用于multithreading。 信号量用于多处理进行同步。 对 ? 任何意见,欢迎。 谢谢

在OS X上的sem_init

我正在使用pthread和semaphore库的一些代码。 sem_init函数在我的Ubuntu机器上工作正常,但在OS X上,sem_init函数完全没有影响。 图书馆有什么问题,或者有不同的方法吗? 这是我用来testing的代码。 sem_t sem1; sem_t sem2; sem_t sem3; sem_t sem4; sem_t sem5; sem_t sem6; sem_init(&sem1, 1, 1); sem_init(&sem2, 1, 2); sem_init(&sem3, 1, 3); sem_init(&sem4, 1, 4); sem_init(&sem5, 1, 5); sem_init(&sem6, 1, 6); 这些值似乎是随机数,并且在sem_init调用之后它们不会更改。

什么时候应该使用互斥体,什么时候应该使用信号量

我们什么时候应该使用互斥量,什么时候应该使用信号量?

限制asynchronous任务

我想运行一堆asynchronous任务,限制在任何给定时间有多less任务可能正在等待完成。 假设您有1000个url,并且您只希望一次打开50个请求; 但只要一个请求完成,您就可以打开到列表中下一个URL的连接。 那样的话,一次只能打开50个连接,直到URL列表被耗尽。 如果可能的话,我也想利用给定数量的线程。 我想出了一个扩展方法, ThrottleTasksAsync ,做我想要的。 那里有一个更简单的解决scheme吗? 我会假设这是一个常见的情况。 用法: class Program { static void Main(string[] args) { Enumerable.Range(1, 10).ThrottleTasksAsync(5, 2, async i => { Console.WriteLine(i); return i; }).Wait(); Console.WriteLine("Press a key to exit…"); Console.ReadKey(true); } } 这里是代码: static class IEnumerableExtensions { public static async Task<Result_T[]> ThrottleTasksAsync<Enumerable_T, Result_T>(this IEnumerable<Enumerable_T> enumerable, int maxConcurrentTasks, int maxDegreeOfParallelism, […]