readerwriterlock

    1熱度

    2回答

    我試着解決以下問題,我知道有多種解決方案,但我正在尋找最優雅的方式(少代碼)來解決它。 我有4個線程,其中3個嘗試在無限循環中向易失性整數變量寫入唯一值(0,1或2),第4個線程嘗試讀取此變量的值並打印stdout的值也在無限循環中。 我想在線程之間進行同步,以便寫入0的線程將被運行,然後是「打印」線程,然後是寫入1,然後再次打印線程的線程,如此等等... 因此,最後我期望看到在「打印」線程的輸出

    -3熱度

    1回答

    我想實現我使用互斥鎖C中的第一讀者的作家的問題(讀者的偏好),並解鎖,以確保沒有作家可以訪問該線程,如果讀者有一個鎖,任何讀者都可以訪問該線程,如果第一個閱讀器有一個鎖。這是我的代碼。我無法得到我的代碼直到結束,即它沒有到達線程連接部分。我想我在某處遇到了一個死鎖,或者我正在將我的互斥鎖放在錯誤的地方並解鎖。 #include <stdio.h> #include <stdlib.h> #in

    0熱度

    2回答

    我試圖在C中實現讀者和作者問題的變體,變體是作者可以是增量或減量,他們應該保持運行計數。下面是我試圖實現的代碼,我得到錯誤「Segmentation Fault(核心轉儲)。我試圖調試,並收到來自gdb - #0 0x0000000000400d84在main()中的反饋。 我會感激如果有人能解釋這個給我/給我如何解決這個故障提示 感謝 #include <stdio.h> #include <

    1熱度

    1回答

    我保持ReaderWriterLockSlim對象的字典資源訪問:(示例代碼是醜陋這裏,只是讓你明白我的目的) static ConcurrentDictionary<string, ReaderWriterLockSlim> rwResourceLocks = new ConcurrentDictionary<string, ReaderWriterLockSlim>()

    3熱度

    5回答

    public class IntermediateMessage { private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private final Lock read = readWriteLock.readLock(); private final

    -2熱度

    1回答

    以上是讀者寫入問題的解決方案,寫者比讀者有偏好。 假設最初1000個閱讀器開始執行代碼來讀取數據(假設讀取的數據代碼很大,每個線程需要1秒),那麼1個寫入器會嘗試寫入數據。所以作者必須等待1000位讀者先完成(即1000秒)。 例如,在一個作家更新時間和許多讀者閱讀時間的應用程序中,作者必須等待1000秒,這是很大的。 是否有解決方案,當作家試圖寫作時,所有讀者都將被搶先,直到作者完成其任務?

    0熱度

    1回答

    有一個衆所周知的算法,使用純WinAPIs/C++在Windows平臺上採用單個進程的線程之間讀取器/寫入器鎖定同步: Here's an example 對我來說,我需要幾道工序之間做到這一點,即作者是在一個過程中,讀者都在其它進程。任何想法如何做到這一點? PS。我需要這個已經開發的項目,所以我不能使用除C++/MFC或純WinAPI以外的其他任何東西。換句話說,我不能使用Boost或類似的擴

    3熱度

    1回答

    我很難理解爲什麼第一個讀者 - 作者問題會使寫入過程陷於捱餓,即:代碼如何爲讀者過程提供優先權?當其中一個閱讀器進程執行signal(wrt)時,作者進程是否無法獲得鎖定?信息量列表是否是結構化的(正如我可以看到作者將如何在LIFO列表中以穩定的閱讀器流程飢餓),從而優先考慮讀者進程,還是我誤解了一些基本的東西? semaphore wrt=1,mutex=1; readcount=0; wr

    0熱度

    1回答

    我發現既沒有boost也沒有tbb庫的條件變量具有與讀寫器鎖定(即boost中的共享互斥鎖)工作接口。 condition_variable :: wait()只接受互斥鎖。但是我認爲讓它在讀寫器鎖定下工作是相當合理的。誰能告訴我爲什麼他們不支持這個原因,或者爲什麼人們不這樣做? 感謝, 崔

    0熱度

    1回答

    我想使用volatile值實現一個簡單的多讀/單寫鎖。 雖然_InterlockedXXX提供了完整的柵欄障礙,如果我是正確的,也是「易失性」關鍵字,我想知道可能的缺陷和改進。我沒有獲取/釋放語義的經驗。 我的代碼: BOOL TryAcquireShared(LONG volatile *lpnValue) { LONG initVal; do { i