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