我對以下內容感到困惑:嵌入式系統中的多線程
我希望能在嵌入式系統領域找到工作。然而,每次我接受過的採訪似乎最終都是關於C語言中線程的對話以及如何進行線程安全編程。
我的問題是如何在嵌入式系統中學習多線程?它們與POSIX線程相同嗎?例如,FreeRTOS中的任務。它們和pthreads一樣嗎?
有人可以給我一些提示,關於該做什麼和從哪裏開始?
我對以下內容感到困惑:嵌入式系統中的多線程
我希望能在嵌入式系統領域找到工作。然而,每次我接受過的採訪似乎最終都是關於C語言中線程的對話以及如何進行線程安全編程。
我的問題是如何在嵌入式系統中學習多線程?它們與POSIX線程相同嗎?例如,FreeRTOS中的任務。它們和pthreads一樣嗎?
有人可以給我一些提示,關於該做什麼和從哪裏開始?
每個操作系統都有自己的線程/任務/進程特徵。 儘管存在差異,但在這些方法之間進行同步,保護和交換數據的方法大致相同。
如果有人知道你不知道特定的操作系統,邀請你接受採訪 - 他/她可能希望你回答一般而不是操作系統特定的。 您可以解決任何與POSIX(或任何其他)工具集有關的問題,並且提到將解決方案遷移到非POSIX環境將保留相同的邏輯並進行一些較小的修改。
無論在RTOS還是Linux中,多線程概念在任何地方都幾乎相同。 區別在於操作行爲。
我的問題是如何去學習嵌入式 系統中的多線程?
我的建議是首先通過參考一些在線材料來學習和理解多線程的概念,您可以通過在桌面上編寫一些運行任何風格的Linux的簡單代碼來練習。
對於諸如使用信號量和互斥鎖的同步機制等一些高級主題,您將瞭解何時使用信號量以及何時使用互斥鎖進行線程同步的基本概念。
然後移動到一些嵌入式目標並使用uCOS-II/uCOS-III或FreeRTOS嘗試一些代碼。
它們是否與POSIX線程相同?
不,它們不完全相同,POSIX線程庫稍微先進,在不同的操作系統上具有很高的可移植性。對於例如在Linux上使用pthread編寫的多線程代碼也可以在Windows上進行編譯和執行,而且幾乎不做任何更改。
另一方面,RTOS上的線程實現不同,RTOS中的線程被視爲任務,並且只有在調用啓動調度程序時纔會執行。
感謝您的回答。除了Mutexes和Semaphores以外,我還需要學習其他任何機制嗎? –
是的,您還需要了解Linux和RTOS中的intertask/interprocess通信。 – Gaurav
大多數嵌入式系統根本沒有OS或RTOS。這意味着線程很少。然而,重入和競態條件的概念對於理解無論是重要的,因爲它們不僅存在於線程中,而且還存在於編寫中斷,雙核或多進程程序時。基本上,編寫一個低級微控制器程序的人,在新數據進入時中斷主程序的中斷,正面臨與編寫高級多線程Windows程序相同的問題,其中一個線程向程序。 – Lundin