我對“執行緒”一詞的理解有困難。
考慮 C11,5.1.2.4 多執行緒執行和資料競爭,1:
在托管實作下,一個程式可以同時運行多個執行執行緒 (或執行緒)。
問題:“執行執行緒”(或“執行緒”)是否僅意味著使用thrd_create(<threads.h>)或main(托管環境)創建的執行緒或<name of the function called at program startup>(獨立環境)創建的執行緒?
問題原因:以下問題:
- 通過呼叫中斷處理程式創建的執行緒是 C 意義上的執行緒嗎?
- 使用您自己的機制(例如A Minimal User-Level Thread Package)創建的執行緒是 C 意義上的執行緒嗎?
- 是否使用
pthread_createC 意義上的執行緒(即 POSIX 執行緒)創建執行緒? - C 意義上的執行緒是使用
CreateThread/執行緒創建的嗎?_beginthread
uj5u.com熱心網友回復:
對術語“執行緒”的理解
“執行緒”是一個有很多定義的詞。這意味著什么取決于您使用誰的定義,有時一個人的“執行緒”看起來不像另一個人的“執行緒”(例如,對于 GPU,“執行緒”通常根本不是“執行執行緒”,更像是CPU“SIMD 通道”)。
如果您試圖找到用于計算機的“線”的不同定義的共同特征(并忽略例外值,并忽略其在紡織品中的用途——“棉線”);您最終可能會得到類似“執行緒是一組指令(帶有控制流),看起來(但可能不是字面上)與其他執行緒同時執行”之類的東西。
通過呼叫中斷處理程式創建的執行緒是 C 意義上的執行緒嗎?
中斷通常被認為是“(非自愿)控制流更改”而不是執行緒(例如,像呼叫函式的執行緒,只是不作為程式的正常/自愿部分)。
使用您自己的機制(例如最小用戶級執行緒包)創建的執行緒是 C 意義上的執行緒嗎?
在 C 意義上,是的。從使用用戶級執行緒包的代碼的角度來看,它是“執行緒”(從作業系統/內核的角度來看,它可能被視為單個執行緒)。
使用 pthread_create(即 POSIX 執行緒)創建的執行緒是 C 意義上的執行緒嗎?
是的,pthread_create()這是在 C 意義上創建執行緒的一種方法。
使用 CreateThread/_beginthread 創建的執行緒是 C 意義上的執行緒嗎?
是的,這些只是在 C 意義上創建執行緒的更多方法(只是它們不那么便攜)。在某些情況下pthread_create(),可以認為是圍繞作業系統提供的任何東西(例如CreateThread()在 Windows、clone()Linux 等)上的“更便攜”的包裝器。
具有諷刺意味的是,thrd_create()在 C11 中引入的它可以被認為是“更不便攜的包裝器”,因為大多數使用 C 的人都在使用舊版本的 C(例如 C90)。這部分是因為某些平臺(Windows)不正式支持任何更高版本的 C(部分是因為想要更現代語言的人切換到更現代的語言)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487804.html
上一篇:C中的結構和typedef
下一篇:.bmp檔案損壞/不受支持
