semaphore

    -1热度

    1回答

    信号我想用Java实现我自己的旗语(只是为了练习,我知道,有Semaphore类) 我已经实现了它这样的: public class MySemaphore { private int value = 1; public synchronized void take() { this.value++; this.notify(); }

    0热度

    1回答

    我想了解信号量并且无法用给出的约束条件来解决问题。我正在使用6个线程的约束:0,1,2尽快完成工作; 3必须等待0和1; 4开始之前必须等待1和2; 5应该等待0和2.我决定使用switch语句来处理这个特定的问题,但似乎无法理解我出错的地方。 #include <iostream> #include <sched.h> #include <time.h> #include <pthread

    3热度

    1回答

    摘要 我目前的代码再生一个很奇怪的错误我有我的软件一个小例子。它使用Boost创建3个名为信号量,并在单个线程中等待每个信号量。这工作。但是如果我改变信号量的名称(通过添加一个给定的前缀),它不会:第3个信号量无故等待无限的时间。 详细信息(源代码和行为) #include <string> #include <vector> #include <iostream> #include <bo

    0热度

    1回答

    我在写一个创建两个线程的程序。每个线程负责读取一个文本文件,每行一个字符。 h 0 h 0 ... 第二的格式如下:: 第一像被格式化 0 i 0 i 0 i 有时可以有后彼此多个字母,或彼此先后多个零。但是,一个确定的是,如果一个文件的一行上有一个字母,第二个文件的相应行将有一个0,反之亦然。 线程应该保持读取文件输入到全局字符数组中,直到它们达到零。此时,他们允许另一

    2热度

    1回答

    非常大量的任务,我使用下面的模式来进行大量的操作(可能有数百万) var allTasks = new List<Task>(); var throttler = new SemaphoreSlim(initialCount: 8); foreach (var file in filesToUpload) { await throttler.WaitAsync();

    0热度

    2回答

    我需要一次完成5个任务并行执行的最大2个任务。 因此,一旦某个任务完成,下一个应该运行,直到没有待处理的任务。 我使用的是一个solution by L.B.,它涉及使用信号来跨任务进行同步。 void LaunchTaskPool() { SemaphoreSlim maxThreadSemaphore = new SemaphoreSlim(2); //Max 2 tas

    1热度

    1回答

    我正在从ACE库支持移动我的代码以提高库支持。我需要替换ACE_Semaphore。看来C++ 11不支持信号量方法。我已经看到了named_semaphore的提升。我看到的另一种选择是去POCO信号灯,在那里我必须包含POCO库。请告诉我哪些是最好的前进方向。 编辑:这是为进程内线程同步。

    0热度

    1回答

    我想在临界区内同步调用一个完成处理程序(使用@synchronized block)。我试图等待使用信号量的完成处理程序,但信号量信号永远不会被调用。 下面是我在做什么: NSNumber *lock = 0; @synchronized(lock) { // critical section code begins dispatch_semaphore_t sema = d

    0热度

    1回答

    最近我才知道睡眠在linux内核中的系统调用会暂停当前调用线程到挂起/阻塞状态,这意味着他们不会使用CPU,直到提到的时间过去。 - 完全理解。 现在来互斥和信号灯, 互斥锁: acquire() { while (!available) ; // busy wait --> my doubt available = false;; } release() { available =

    0热度

    1回答

    我有以下测试代码来模拟信号量和限制任务执行的使用。如果其中一个正在运行的任务抛出像下面这样的异常,是否有办法不继续创建新任务?我不需要现有的任务来停止运行,我只是希望遇到异常后不会有新的任务启动。 当前任务将在下面的这种情况下开始。我想让它在因抛出异常而运行几个任务之后停止。 var testStrings = new List<string>(); for (var i = 0