佔有鎖的任務可以執行寫入操作
=‘\0’){//表示字元數已經統計完,新執行緒已經釋放工作區pthread_mutex_unlock(&work_mutex)
這樣當其他執行緒想訪問該共享資源時需要先獲取鎖的狀態,如果Mutex是上鎖的狀態,它就需要等Mutex釋放後才能獲取鎖然後訪問該資源
1 建立訊號量在新版FreeRTOS中,一般使用xSemaphoreCreateMutex()函式動態建立互斥訊號量,其所需要的記憶體透過動態記憶體管理方法分配
if(pxQueue->uxItemSize==(UBaseType_t)0){#if ( configUSE_MUTEXES == 1 )//如果是互斥訊號量{if(pxQueue->uxQueueType==queueQUE
低8bit用於存放成功申請到該互斥訊號量的任務prio,如果沒有被佔用則使用OS_MUTEX_AVAILABLE宏定義(0xFF)
Mutex 的使用條件Mutex雖然高效,靈活,但存在若干限制條件,需要牢記:同一時刻只有一條核心路徑可以持有鎖只有鎖持有者可以解鎖不允許遞迴加鎖解鎖程序持有mutex時不可退出Mutex 可能導致睡眠阻塞,不可用於中斷處理與下半部使用Mu
//釋放加在互斥量上的鎖如果不希望執行緒被阻塞可以使用pthread_mutex_trylock嘗試對互斥量進行加鎖
而訊號量不允許使用在中斷中,而可以用於程序上下文自旋鎖保持期間是搶佔失效的,自旋鎖被持有時,核心不能被搶佔,而訊號量和讀寫訊號量保持期間是可以被搶佔的另外需要注意的是:訊號量鎖保護的臨界區可包含可能引起阻塞的程式碼,而自旋鎖則絕對要避免用來
讀寫鎖要根據程序進入臨界區的具體行為(讀,寫)來決定鎖的佔用情況
「實現互斥關係」假設兩個程序PA,PB具有互斥關係,也就是他們倆要使用一個臨界資源,怎麼做呢,我們設定一個mutex訊號量,初值設為1,這樣的話剛開始兩個程序都能使用,他們使用的時候,先wait,wait完自然要讓mutex-1,這樣mut