我正在研究freeRtos,并且我有一個名為say x 的變數。現在只有一個任務每秒寫入此變數,其他任務正在讀取變數值。我需要用互斥鎖保護變數嗎?
uj5u.com熱心網友回復:
如果變數是 32 位或更小,并且它的值是獨立的,并且不會針對任何其他變數進行解釋,那么您不需要互斥體。
如果您有一個大于 32 位的資料項,或者您有多個必須保持在一起的資料項(例如:記錄亮度和顏色的光傳感器),那么您需要一個互斥體,以便讀者無法獲得一部分舊資料和部分新資料。
uj5u.com熱心網友回復:
我認為在更改和讀取變數時使用互斥信號量是一種很好的做法,用于多個任務。
在讀取另一個任務時,可以更改字串等多位元組變數。它不會在每次讀數時都進行,但取決于頻率,它的可能性要高得多。
注意:寫入 32 位或更小的變數是安全的,如果由同一內核上的任務訪問(如果使用雙核 esp)
uj5u.com熱心網友回復:
我認為你應該使用 mutex ,考慮這種情況:(r 代表 read pro,w 代表 write pro)
如果 r 在 w 之前被呼叫,但由于部署,w 在 r 讀取值之前完成更改值。這很麻煩, r 讀取新值,但如果期望舊值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491161.html
上一篇:pySpark-->NoSuchTableException:在資料庫“默認”中找不到表或視圖“my_test_table_thread_1”
