iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
自我挑戰組

韌體工程師的不只 0x10 個問題 系列

從知名文章「韌體工程師的0x10個問題」延伸,講述三十個跟韌體工程師、C、C++ 相關的概念。

鐵人鍊成 | 共 31 篇文章 | 3 人訂閱 訂閱系列文 RSS系列文
DAY 21

Day 21-智慧型指標

前情提要 C++ 記憶體共分為三區:1. 靜態(static):儲存「全域變數」與「靜態變數」,會存活至整段程式結束為止。2. 堆疊(stack):儲存「區域變...

2026-08-21 ‧ 由 ralphhong5465 分享
DAY 22

Day 22-初探多執行緒

Day 17 的文章曾經為了鋪陳 volatile 關鍵字用法,做了些執行緒的超入門介紹,但執行緒主題其實還有好多內容,就從這篇開始細細探討。 Day 17 文...

2026-08-22 ‧ 由 ralphhong5465 分享
DAY 23

Day 23-資料競爭

多執行緒讓 CPU 可以同時多工工作,雖然可以提升 CPU 使用效率、減少資源浪費,但也潛藏著風險,其中最著名的為「資料競爭(data race)」。 註:可能...

2026-08-23 ‧ 由 ralphhong5465 分享
DAY 24

Day 24-資料競爭的解決方法

Day 23 的文章講到如果多執行緒共用同一個記憶體資源,且至少一個執行緒有寫入行為的話,會導致資料競爭,跑出不在預期中的結果,本篇文章就要來探討解決方法。 第...

2026-08-24 ‧ 由 ralphhong5465 分享
DAY 25

Day 25-解決資料競爭,不能解決競賽條件

以往初學「競賽條件(race condition)」時,用的其實都是 Day 23 提到的「資料競爭(data race)」當例子,但在本次參加鐵人賽的過程中,...

2026-08-25 ‧ 由 ralphhong5465 分享
DAY 26

Day 26-死結與解決方式

前面介紹了互斥鎖可以避免資料競爭,但如果複數個執行緒都把持著某些資源、卻也都同時在等待其他執行緒手上的資源,就會形成「死結(deadlock)」。 死結形成的四...

2026-08-26 ‧ 由 ralphhong5465 分享
DAY 27

Day 27-活鎖與飢餓

除了死鎖,還有其他可能會讓程式卡住,一個是「活鎖(livelock)」、另一個是「飢餓(starvation)」。 活鎖 Livelock 有別於「死鎖」是複數...

2026-08-27 ‧ 由 ralphhong5465 分享
DAY 28

Day 28-記憶體模型

在多執行緒下,編譯器或 CPU 可能為了追求效能而重排指令順序,導致實際執行的結果與預期不同,因此需要「記憶體模型(memory model)」來規範不同執行緒...

2026-08-28 ‧ 由 ralphhong5465 分享
DAY 29

Day 29-用 async / promise + future 進行非同步處理

從 C++ 11 開始,C++ 可以用 async / promise 跟 future 實現非同步操作,本文將以超簡單範例說明相關用法,首先是較為簡潔的 as...

2026-08-29 ‧ 由 ralphhong5465 分享
DAY 30

Day 30-執行緒池

在需要很多執行緒幫忙處理工作時,如果每次都開一個新執行緒、用完再銷毀顯得非常浪費,不如直接準備好一批執行緒,看誰有空就請誰做事,這批「先被準備好、待命中的執行緒...

2026-08-30 ‧ 由 ralphhong5465 分享