39 程線特有資料在建立時必須先呼叫哪個函數?
(A) pthread_data_create()
(B) pthread_key_create()
(C) pthread_specific_create()
(D) pthread_tsd_create()
統計: A(0), B(4), C(2), D(2), E(0) #3399886
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
程線特有資料(Thread-Specific Data, TSD)(每個執行緒各自擁有的資料)
-
建立時(初始化)
-
哪個函數
? 重點:
TSD 的第一步是「建立 key」
【第二步:白話翻譯】
這題在問:
? 「如果你想讓每個執行緒都有自己的資料(不互相干擾),第一步要呼叫哪個函數?」
【第三步:解題思路】
這題在考什麼觀念?
? pthread Thread-Specific Data(TSD)使用流程
解題步驟
-
理解 TSD 是什麼
-
回想使用流程
-
找出「第一步」
原理與規則(生活比喻)
把 TSD 想成「每個人有自己的置物櫃」:
-
每個執行緒 = 一個人
-
TSD = 個人置物櫃
? 但要先做什麼?
? 先拿到鑰匙(key)
? 才能存取自己的東西
【第四步:選項分析】
(A) 為什麼錯?
✘ 錯
? 沒有這個標準函數
(B) 為什麼對?
✔ 正確(本題答案)
? pthread_key_create():
建立一個 key,用來存取 thread-specific data
? 這是第一步!
(C) 為什麼錯?
✘ 錯
? 沒有這個標準函數名稱
(D) 為什麼錯?
✘ 錯
? 這也不是 POSIX 標準函數
【觀念補充與延伸】
核心觀念定位
? 作業系統 / 多執行緒(Thread)
? 中頻考點
TSD 使用流程(一定要記)
1️⃣ 建立 key
2️⃣ 設定資料
3️⃣ 取得資料
為什麼需要 TSD?
? 避免多執行緒共用資料造成:
-
race condition
-
資料衝突
? 每個 thread 有自己的資料副本
觸類旁通(舉一反三)
對比概念
-
global variable(全域變數)→ 會衝突
-
thread-specific data → 不會衝突
變化題型
-
問:如何取得 TSD?
? pthread_getspecific()
【記憶口訣】
? 「TSD 先拿 key → pthread_key_create」
【常見陷阱】
學生最容易搞混的地方
記錯函數名稱
心理盲點
看到 pthread 就亂選
避坑指南
? 記流程:
create → set → get