我正在創建兩個線程thread1和thread2。線程1正在讀取模擬值,線程2應處理在線程1中讀取的模擬值並設置PWM參數。到目前爲止我所做的是,在主文件(我正在創建線程)中,我已經聲明瞭一個全局變量(用於存儲模擬值),並將指針傳遞給全局變量給兩個線程。在thread1中,存儲在全局變量和thread2中的讀取模擬值將讀取全局變量並對其進行處理。所以,我的問題是有沒有其他的方式來做到這一點?即我們有信號量,互斥等最適合這種應用程序?pthread中兩個線程之間的通信
2
A
回答
4
你的問題沒有一般的答案,這取決於你的很多用例。
pthreads的經典方法是使用互斥條件對來向讀線程發送修改值。這種情況適用於該線程大多處於空閒狀態並且只能在更改時進行工作的情況。在這裏,除了互斥體之外,還有一個條件變量可以確保你的閱讀線程在他無所事事的時候不會吃資源。
如果您的閱讀線程正在做一些永久性的工作,並且只使用該值,則會出現不同的情況:第一種情況是用互斥鎖保護變量,以確保您讀取的值不是一半通過更新,並始終保持一致。
更現代的方法是使用(或確保)您的讀寫操作是原子操作。新的C標準C11爲該接口提供接口,大多數編譯器已經將這些操作作爲擴展來實現。
1
我認爲這將需要一個非常基本的互斥。請參閱下面我的僞代碼:
Thread1() {
Mutex_lock();
Process global variable;
Unlock_mutex();
}
類似線程2 .. 我可以提供更具體的答案,如果您提供您當前的代碼。
+0
謝謝你的回覆。我已經發布了我的代碼,其他懷疑它存在於下面的鏈接中http://stackoverflow.com/questions/10860436/unexpected-output-in-pthread。 –
相關問題
- 1. 兩個線程之間的通信
- 2. 線程,兩個線程之間的通信c#
- 3. 兩個Arduinos之間的無線通信
- 4. 線程之間的通信?
- 5. 線程之間的通信
- 6. 線程之間的通信
- 7. 通信之間的兩個
- 8. Python關係/兩個或多個線程之間的通信
- 9. 兩個java程序之間的通信
- 10. PySide中的線程之間的通信
- 11. java中的線程之間的通信
- 12. Qt中的線程之間的通信
- 13. 延遲兩個線程之間的通信
- 14. 進程與線程之間的通信
- 15. boost asio在兩個線程之間進行通信C++
- 16. 如何在兩個線程之間進行通信
- 17. C++多線程數據結構,用於兩個線程之間的通信
- 18. 在線程之間劃分工作? (pthread)
- 19. WPF應用程序中多個線程之間的通信
- 20. EDT與主線程之間的通信
- 21. c#.Net 4.5線程之間的通信
- 22. 線程之間的Java通信
- 23. 線程之間的串口通信
- 24. Task.Factory和線程之間的通信
- 25. 強制線程之間的通信
- 26. 在MFC中的兩個子線程之間發送信號
- 27. 兩條線程之間的溝通
- 28. 兩個組件之間的通信reactjs
- 29. 通信的兩個主題之間
- 30. 兩個iOS設備之間的通信
非常感謝您給出一個想法來思考我的需求......什麼是原子讀寫操作?它能做什麼 ?因爲我無法在google中找到它:( –
例如https://www.informit.com/articles/article.aspx?p=1832575和 https://en.wikipedia.org/wiki/Linearizability –