40 下列哪個不是取消點函數?
(A) read()
(B) write()
(C) pthread_create()
(D) pthread_testcancel()
統計: A(0), B(1), C(5), D(2), E(0) #3399887
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
取消點(cancellation point)(執行緒可以被安全終止的位置)
-
不是(找例外)
-
函數名稱辨識
? 這題在考:
哪些函數會檢查「要不要被取消」
【第二步:白話翻譯】
這題在問:
? 「哪一個函數『不會』讓執行緒在那裡被取消?」
【第三步:解題思路】
這題在考什麼觀念?
? pthread cancellation 機制
解題步驟
-
理解 cancellation point 是什麼
-
想哪些函數會「阻塞或檢查取消」
-
找出「不會」的
原理與規則(生活比喻)
把 cancellation 想成「老闆叫你下班」:
-
你不會隨時停
-
只會在「適當時機」停
? 例如:
-
等資料(read)
-
主動檢查(testcancel)
? 這些就是「取消點」
【第四步:選項分析】
(A) 為什麼錯?
✘ 錯(它是取消點)
? read():
-
可能會阻塞(等待資料)
-
是標準 cancellation point
(B) 為什麼錯?
✘ 錯(它是取消點)
? write():
-
也可能阻塞
-
也是 cancellation point
(C) 為什麼對?
✔ 正確(本題答案)
? pthread_create():
-
只是建立執行緒
-
不是 cancellation point
? 不會檢查取消請求
(D) 為什麼錯?
✘ 錯(它是取消點)
? pthread_testcancel():
? 專門用來:
主動檢查是否要取消
? 是最典型的 cancellation point
【觀念補充與延伸】
核心觀念定位
? 作業系統 / 多執行緒(pthread)
? 中高頻觀念題
什麼是 Cancellation Point?
? 執行緒在這些地方:
-
會檢查是否有取消請求
-
若有 → 安全結束
常見 cancellation point
| 類型 | 函數 |
|---|---|
| I/O | read(), write() |
| 等待 | sleep(), wait() |
| thread | pthread_testcancel() |
為什麼需要?
? 避免:
-
在錯誤時機中斷
-
資料不一致
? 提供「安全終止點」
觸類旁通(舉一反三)
對比概念
-
非取消點 → 不會被中斷
-
取消點 → 可安全中斷
變化題型
-
問:如何手動建立取消點?
? pthread_testcancel()
【記憶口訣】
? 「阻塞與檢查 → 才是取消點」
【常見陷阱】
學生最容易搞混的地方
看到 pthread 就以為都是取消點
心理盲點
以為所有函數都能被中斷
避坑指南
? 記住:
只有「可能停住」或「主動檢查」的才是取消點