TI AM335x: Acquire QMutex lock with multiple threads
在 AM335x 平台中,我們設定了 scheduling policy 為 SCHED_FIFO,當有三個同 priority 的 thread 頻繁地搶一個 QMutex 的時候,會發生總是有一個 thread 一直搶不到的情況。
以下試了幾個方案,都沒改變什麼:
以下試了幾個方案,都沒改變什麼:
- Scheduling policy 改為 SCHED_RR
- 改用 pthread_mutex_t (Qt 內部其實也是使用它)
後來在維持 SCHED_RR 的情況下,在每次取得 QMutex 並離開後,呼叫 sched_yield(),讓目前的 calling thread 放到 thread queue 的最後面,上述問題就不再發生了。
留言
張貼留言