[問題] 不同執行緒 讀到不同資料

看板C_Sharp作者 (3O6p)時間8年前 (2016/03/13 17:09), 8年前編輯推噓0(0018)
留言18則, 4人參與, 最新討論串1/1
因為原本就使用在設計模式下的架構 在抽象類別的地方使用了蠻多的static 來當作是類似全域變數的功能 (就是所有繼承抽象的class,抓取相同的變數來動作) 但是現在需要使用多執行緒,來實現不同的功能 每個執行緒會包相同的設計模式的架構 但是不同的執行緒 設計模式內部的資料是要不一樣的 請問這有什麼好辦法解決嗎 不知道有沒有人看得懂我在問什麼..... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.59.89 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1457860177.A.C7D.html

03/13 18:19, , 1F
不明白
03/13 18:19, 1F

03/13 19:01, , 2F
不懂為什麼在不同class要共用的變數卻在不同thread不共用..
03/13 19:01, 2F

03/13 19:03, , 3F
感覺一般設計上要兩套一樣的會是生兩套instance,不會是同
03/13 19:03, 3F

03/13 19:03, , 4F
一套然後寫成static,再用thread去拆兩套..
03/13 19:03, 4F

03/13 19:05, , 5F
也許當初用static共用而不是用DI注入同一個變數就錯了
03/13 19:05, 5F

03/13 19:06, , 6F
不過還是回你的問題,不同thread各一份可以用ThreadLocal
03/13 19:06, 6F

03/13 19:27, , 7F
為了設計模式而設計模式吧..
03/13 19:27, 7F

03/14 02:39, , 8F
設計模式下的架構怎麼會常用static...只有簡單工廠明顯用
03/14 02:39, 8F

03/14 02:39, , 9F
到吧。
03/14 02:39, 9F

03/14 02:41, , 10F
喔,還有獨體模式
03/14 02:41, 10F

03/14 02:43, , 11F
然後你抽象類大量用到外部變數(也就是你寫成static的)就要
03/14 02:43, 11F

03/14 02:44, , 12F
認真考慮一下你的OOAD是不是有問題...
03/14 02:44, 12F

03/14 02:55, , 13F
我猜你的static裡面放的是config參數,請把他們的static
03/14 02:55, 13F

03/14 02:56, , 14F
去掉,做成instance,然後用獨體模式來存取。
03/14 02:56, 14F

03/14 02:57, , 15F
然後你不同執行續使用不同config的需求,只需要使用不同
03/14 02:57, 15F

03/14 02:58, , 16F
的config instance,其他部分應該幾乎不用改
03/14 02:58, 16F
這部分我有想過,不過如果是使用獨體模式,在多執行緒下不是就同一筆資料了嗎? 不知道是不是我理解錯誤。 因為現在的資料必須在執行緒下生成與修改。 我已經想好其他發法解決了,但是還是想知道有沒有什麼好方法 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 10:43:55 後來看了一下S大的內容,發覺我想到的方法和S大說得差不多 原來這叫DI注入,又學到了新東西^^,太感謝了。 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 11:08:15

03/14 16:48, , 17F
獨體模式是指你平常使用,實際上還是用instance而不是
03/14 16:48, 17F

03/14 16:49, , 18F
static field, 多執行續只需要改成各自new instance就好
03/14 16:49, 18F
了解,感謝你的解答 ※ 編輯: autumnk (220.134.59.89), 03/14/2016 18:10:53
文章代碼(AID): #1MvIvHnz (C_Sharp)