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

    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 =

    -1热度

    2回答

    我有一个c程序在启动时创建一个线程。线程的目的是在指示时将固件刷新到设备。所以当线程启动的时候它等待一个信号量和一个点,主应用程序将sem_post(&semaphore);发布到线程中的信号量,线程将完成它的任务。 有时候这个任务可能会失败(如果有硬件问题)。我的问题是我可以从线程返回一个值到信号量发布到主应用程序的位置吗?固件闪烁通过system()完成,结果返回到int变量res。我想把这个

    0热度

    1回答

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