第七講 臨界區保護
臨界資源:
臨界資源是指一次僅允許一個線程訪問的共享資源。他可以是一個具體的
硬件設備,也可以是一個
變量,一塊
緩沖區。
不論是硬件臨界資源還是軟件臨界資源,多個線程必須互斥的對他們進行訪問。
臨界區:
每個線程中訪問(操作)臨界資源的那段代碼稱為臨界區(Critical Section),我們每次只允許一個線程進入臨界區。
臨界區保護方法:
1.關閉系統調度保護臨界區
(1)禁止調度
void thread_entry(void *parameter)
{
while(1)
{
rt_enter_critical();//調度器上鎖,禁止線程切換,僅響應中斷
臨界區
rt_exit_critical();//調度器解鎖
}
}
(2)關閉中斷(更暴力)
因為所有線程的調度都是建立在中斷基礎之上的,關閉中斷后,自然就無法進行線程切換,線程也不會對其他線程搶占。
void thread_entry()
{
rt_base_t level;
while(1)
{
level=rt_hw_interrupt_disable();//關閉中斷
臨界區
rt_hw_interrupt_enable(level);//開啟中斷
}
}
2.互斥特性保護臨界區
信號量,互斥量