技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2026 iThome 鐵人賽
DAY
21
0
自我挑戰組
學習C#續
系列 第
21
篇
Day 21: 多執行緒基礎與執行緒安全(Thread & Concurrency)
18th鐵人賽
413570622
2026-10-04 19:29:04
21 瀏覽
分享至
執行緒(Thread)基礎:
程式執行的最小獨立單元。透過建立多個執行緒,可以讓多項任務在背景同時(並行/並行)執行,避免耗時任務阻塞主執行緒(如終端機畫面凍結)。
命名空間為 System.Threading。
Thread vs ThreadPool(執行緒池):
手動 Thread:
每次 new Thread() 都會向作業系統索取原生執行緒,建立與銷毀的開銷極大(預設每個執行緒配置約 1 MB 堆疊記憶體)。
適合執行時間很長(如背景常駐監控服務)或需要自訂執行緒優先權、設定前台/背景屬性的情境。
ThreadPool(執行緒池):
預先建立並維護一組閒置執行緒供全域重複利用,工作完成後將執行緒歸還池中,省去反覆建立銷毀的耗損。
透過 ThreadPool.QueueUserWorkItem(...) 派工。
適合執行時間短暫、頻繁發生的背景微型任務(現代 Task 底層亦基於此機制)。
資料競爭(Race Condition):
當多個執行緒同時讀寫同一個共享變數(Shared Resource),且最終結果取決於執行緒切換的先後時序時,就會發生資料競爭,導致數據計算錯誤(例如經典的「計數器數值遺失」或「銀行帳戶超額提款」)。
例如 count++ 在底層其實分為三步驟:讀取值->加一->寫回值。若兩個執行緒在此期間交錯執行,部分累加就會被覆蓋。
lock 關鍵字(互斥鎖):
確保同一時間只有一個執行緒能進入受保護的關鍵程式區塊(Critical Section),其餘執行緒必須在門外排隊等待。
編譯後等價於 Monitor.Enter 與 Monitor.Exit 搭配 try-finally 結構。
鎖定物件的最佳實踐:
宣告一個專屬的私有唯讀參考物件:private readonly object _lockObj = new object();。
絕不要鎖定 this、typeof(MyClass) 或 string(字串拘留機制會造成不可預期的跨程式碼鎖定衝突)。
實作範例
留言
追蹤
檢舉
上一篇
Day 20:資源釋放與記憶體管理
系列文
學習C#續
共
21
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
17
Day 17:select 子句投影作用、LINQ to Object
18
Day 18:發行者/訂閱者模式(Publisher-Subscriber Pattern)
19
Day 19: 擴充方法(Extension Methods)與現代模式比對(Pattern Matching)
20
Day 20:資源釋放與記憶體管理
21
Day 21: 多執行緒基礎與執行緒安全(Thread & Concurrency)
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
929
組
團體組數
32
組
累計文章數
17008
篇
完賽人數
231
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
17th鐵人賽
14th鐵人賽
12th鐵人賽
18th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
熱門問題
好奇問問各位大大當如果面對上層施壓時,工程師應當如何捍衛自己的工作優先考量權?上層威脅利誘時,又應當如何用溫和不失堅定的語氣讓上司明白自己為什麼這麼做
網咖外掛
讓 AI Agent 唯讀連 PostgreSQL:BEGIN READ ONLY 擋不住 COPY TO PROGRAM,防線該設在交易還是角色?
新的IR ? 適合嗎 Dynamic Incident Response: A Framework for Security Teams
停用網路卡隨機mac 的方式 (Random MAC Addresses for Ethernet Adapters)
熱門回答
讓 AI Agent 唯讀連 PostgreSQL:BEGIN READ ONLY 擋不住 COPY TO PROGRAM,防線該設在交易還是角色?
好奇問問各位大大當如果面對上層施壓時,工程師應當如何捍衛自己的工作優先考量權?上層威脅利誘時,又應當如何用溫和不失堅定的語氣讓上司明白自己為什麼這麼做
網咖外掛
熱門文章
Claude code 新手篇 8.5: Auto mode — 你的預設模式到底在幫你擋什麼
Ai真的停不下來了嗎
如何防止Ai在沒有漏洞的情況下越獄
AI 的退潮、控制與反控制:解析大眾興趣沉澱與演算法博弈
Day 1|建置資料分析開發環境:Python、VS Code 與 Jupyter Notebook 快速上手
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}