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 筆)

#7319076

【第一步:找關鍵字】

關鍵字:

  • 程線特有資料(Thread-Specific Data, TSD)(每個執行緒各自擁有的資料)

  • 建立時(初始化)

  • 哪個函數

? 重點:
TSD 的第一步是「建立 key」

【第二步:白話翻譯】

這題在問:

? 「如果你想讓每個執行緒都有自己的資料(不互相干擾),第一步要呼叫哪個函數?」

【第三步:解題思路】

這題在考什麼觀念?

? pthread Thread-Specific Data(TSD)使用流程

解題步驟

  1. 理解 TSD 是什麼

  2. 回想使用流程

  3. 找出「第一步」

原理與規則(生活比喻)

把 TSD 想成「每個人有自己的置物櫃」:

  • 每個執行緒 = 一個人

  • TSD = 個人置物櫃

? 但要先做什麼?

? 先拿到鑰匙(key)

? 才能存取自己的東西

【第四步:選項分析】

(A) 為什麼錯?

✘ 錯

? 沒有這個標準函數

(B) 為什麼對?

✔ 正確(本題答案)

? pthread_key_create():

建立一個 key,用來存取 thread-specific data

? 這是第一步!

(C) 為什麼錯?

✘ 錯

? 沒有這個標準函數名稱

(D) 為什麼錯?

✘ 錯

? 這也不是 POSIX 標準函數

【觀念補充與延伸】

核心觀念定位

? 作業系統 / 多執行緒(Thread)
? 中頻考點

TSD 使用流程(一定要記)

1️⃣ 建立 key

ㅤㅤ
pthread_key_create(&key, destructor);
ㅤㅤ

2️⃣ 設定資料

ㅤㅤ
pthread_setspecific(key, data);
ㅤㅤ

3️⃣ 取得資料

ㅤㅤ
pthread_getspecific(key);
ㅤㅤ

為什麼需要 TSD?

? 避免多執行緒共用資料造成:

  • race condition

  • 資料衝突

? 每個 thread 有自己的資料副本

觸類旁通(舉一反三)

對比概念

  • global variable(全域變數)→ 會衝突

  • thread-specific data → 不會衝突

變化題型

  • 問:如何取得 TSD?
    ? pthread_getspecific()

【記憶口訣】

? 「TSD 先拿 key → pthread_key_create」

【常見陷阱】

學生最容易搞混的地方

記錯函數名稱

心理盲點

看到 pthread 就亂選

避坑指南

? 記流程:

create → set → get

0
0
#6786484
1. 題目解析 題目詢問在建立程線特有資...
(共 1056 字,隱藏中)
前往觀看
0
1