spinlock

    0熱度

    1回答

    我正在努力正確實現內核螺旋鎖與返回語句的結合,該語句應該向用戶空間返回一個值。我實現了一個內核系統調用「sys_kernel_entropy_is_recording」這應該返回的內核變量「is_kernel_entropy_recording」的值: asmlinkage bool sys_kernel_entropy_is_recording(void) { spin_l

    0熱度

    1回答

    我是一名計算機科學專業的學生,​​我有一項任務要求我使用螺旋鎖來鎖定線程,並在其關鍵部分完成後解鎖。困難是我搜索了很多次,但我沒有找到任何有用的信息。例如,我試圖包含像#include <linux/spinlock.h>這樣的頭文件,但是當我使用gcc編譯這個c程序時,它說無法找到這樣的頭文件。那麼,我應該包含什麼頭文件,以及爲了使用螺旋鎖需要調用哪些函數?

    5熱度

    1回答

    我的代碼中有一個自旋鎖,它在兩個線程之間共享。當一個線程持有鎖而另一個線程試圖獲得鎖時,第二個線程將繼續在處理器上旋轉。那麼如果在線程正在旋轉鎖的處理器上發生中斷,會發生什麼? 我已經使用spin_lock()來取鎖而不是spin_lock_irqsave(),因爲我不想在本地處理器上禁用中斷。 當我在內核中檢查spin_lock()函數的代碼時,我發現默認情況下禁用搶佔並且沒有任何IRQ。所以我

    0熱度

    1回答

    我正在修復與一個庫中的併發訪問集合有關的一個錯誤。目前,庫使用互斥鎖(鎖)來控制來自多個線程的訪問。代碼中的鎖定區域包含應該執行得相當快的代碼(修改列表/字典或從中讀取),因此旋轉鎖定似乎與此場景匹配。 但是... 在大多數情況下,鎖定不是必須的,因爲使用這個庫的大多數應用程序都是單線程的,對我來說不要放慢速度很重要。 天真的基準測試表明自旋鎖檢查速度較慢,沒有使用資源,但我不完全信任它。

    0熱度

    1回答

    與ftrace類似,我有一個函數,它打印armv7板上引導內核時調用的所有函數的地址。在功能調用setup_arch功能之前地址被正確打印,但在此之後,隨機地址被打印。我認爲它是自旋鎖的問題,因爲映射時這些地址涉及的功能如_raw_spin_lock_irqsave和add_preempt_count。它可能不是螺旋鎖問題。 關於如何解決它的任何建議?

    0熱度

    1回答

    我只是想知道,假設PC有多核。有三個線程在三個不同的內核中運行。線程(T1)在覈心(C1)獲得了自旋鎖(S)並獲得了T1的鎖定,同時在覈心C2和C3中運行的T2和T3線程嘗試獲取鎖並等待釋放鎖。一旦T1線程釋放鎖定哪個線程將獲得鎖定T2或T3?我正在考慮T2和T3的相同優先級,並且同時在不同的內核中等待。

    0熱度

    1回答

    對於這種情況:進程B將等待進程A釋放自旋,因此預先排好? Process A: -->spin lock --> do strict call --> before unlock time int Time int ISR: --> Process A time slice finished --> need schedule -->ISR ret --> schedule to Process

    0熱度

    1回答

    我對驅動程序環境中的自旋鎖和延遲有一個普遍問題。我有一個可以在gpio中讀寫的Linux驅動程序。讀寫操作在單個引腳上完成,並且完全基於時序(HDQ協議)。最初的驅動程序是使用udelay()調用實現的,最糟糕的場景是大約500 us。 驅動程序沒有實現任何中斷,只是在使用常規gpio_get_value()和gpio_set_value()的特定GPIO中進行定期讀寫。 在這些延遲之間,驅動程序

    1熱度

    1回答

    這是一個典型的CLH鎖在java中: public class CLHLock{ private final AtomicReference tail; // why we need this node? private final ThreadLocal myPred; private final ThreadLocal myNode;

    0熱度

    1回答

    我使用下面的API來殺死一個tasklet: tasklet_kill(); 雖然殺微進程,我一直在使用spin_lock_irqsave禁用本地中斷。爲什麼內核引發以下消息(警告): Attempt to kill taskletlet from interrupt 這難道不是最好使用tasklet_kill()一邊拿着用spin_lock?