2011-03-02 25 views
1

嗨 我有一個使用了幾個變量的線程。 變量在運行時從argv []中確定。將參數傳遞給C窗口中的線程的最佳方式是什麼?

我的選項,我看到他們:

  1. 使變量全局所以線程可以使用它們(不需要保護他們,因爲線程不改變它們)。我不願意使用這個,因爲全局變量不太好

  2. 創建一個結構來保存變量並將其傳遞給線程。 varibales並沒有真正相關,所以它將是一個「強制」結構,除了線程的參數外沒有其他含義。另外,比方案1更復雜

還有其他選擇嗎?哪一個被認爲更好?

謝謝!

+0

有一個原因允許您將參數傳遞給線程 - 使用它。除非你完全沒有別的選擇,否則不要使用全局變量。 – casablanca

+0

這是一個教條,說這裏不使用全局變量。如果參數對於進程生命週期是恆定的,那麼全局變量有什麼問題?我不能寫這個應用程序的答案,因爲教條主義者會投票。 –

回答

8

這將是一個「被迫」結構與線程

這聽起來像一個相當不錯的使用了一個結構比其他的說法沒有任何意義。數據成員都是相關的,因爲他們都需要傳遞給線程。

它並不比第一個選項複雜(除非有人考慮定義一個結構並複製一些變量變得複雜)。這確實是一個更多的代碼,但它也應該更容易查看代碼並準確查看給線程的數據。

+0

+1。另外,在(或其他人)決定線程需要修改變量的那天,您會後悔使用全局變量,但忘記考慮變量在線程之間共享...... –

0

第二個問題是正確的做法沒有什麼真正的問題。全局變爲特別是多線程問題。如果在執行過程中發生變化,它們甚至會變成問題,因爲在修改它們時需要某種互斥鎖(或其他)來保護它們。當所有事物都使用這些全局變量序列化時,它們很容易成爲瓶頸。

我還會提到,如果一個線程的參數真的是完全不相關的,我不得不想知道你的線程在做什麼,並且(特別是)設計是否需要一些工作。應該有一個邏輯關係,理由很簡單,一個線程本身應該是合乎邏輯的 - 如果輸入實際上不相關,那麼對它們的操作也應該是分開的。

相關問題