除了主執行外,我正在使用兩個線程(pthread_t)的mingw程序中工作。每個線程都包含一個無限循環,用於與外部儀器進行連續通信,每個通信具有不同的速度和協議。主程序僅在用戶請求時在運行時顯示儀器數據。線程中的無限循環只有在main中將「keepalive」變量設置爲0時纔會退出。 要交換線程之間的數據,我想知道的兩種方法,我知道的利弊:與線程共享變量的最佳方式
傳遞參數給線程(一個結構可以使用在pthread_create的最後一個參數傳遞:* arg)。
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
使用全局變量和控制併發(的pthread_mutex_lock和調用pthread_mutex_unlock)
其實我使用兩種方式(主要是因爲我需要一個早期的 「工作程序版本」 )。作爲我參考的變量交易的一個例子:
- 我將「keepalive」變量定義爲全局(當線程進入無限循環時共享它)。
- 我通過結構傳遞通信配置數據。
- 我正在通過全局數組檢索儀器數據(無限循環內更新)
- 我正在檢索文件的句柄和與結構體的通信(最後要關閉並釋放一切正常)。
我將不勝感激關於使用全局變量與使用結構與原子變量相關的一些建議。 (代碼清潔,速度,效率,CPU /內存使用...)。
感謝。
避免全局變量,這是一個通用的提示,如果你使用線程也是一樣的。 –
你絕對應該使用原子變量。 – Linus
由於「基於意見」,我看到近距離投票。考慮到這個問題目前的措辭,這可能是事實。改變它以詢問使用全局變量進行線程同步的可能缺點可能會減輕這一點。然後再回答這個問題,我想到這個問題可能會更適合程序員.stackexchange.com,或者? –