核心級執行緒

2021-08-27 07:46:09 字數 1209 閱讀 4798

不知不覺已經是最後一次的實驗了。這一次實驗的內容是:

在ubuntu下編寫多執行緒的應用程式memtest.c,解決乙個可並行運算的問題。

在linux 0.11的程序管理基礎上,按照posix threads標準實現核心級執行緒,使其能支援memtest.c的執行

說來也很遺憾,這個實驗我只完成了使用者態的實現,核心級完全沒有考慮去實現(時間、精力等等多方面的問題)。如果真的要把核心級一併實現,那麼這次的實驗可以說是最難的一次。

下面簡單的說一下實現的思路。

首先設計了乙個結構體,用來儲存各個執行緒的資訊。

struct info

info[30];

在main函式中,對於使用者輸入的命令進行判斷,並作出相應的操作。使用者輸入的命令有六個:

times number :設定對每個記憶體單元進行測試的次數。number即次數。每次測試都要測完全部的5種資料。例如,命令「times 5」表示對每個記憶體單元,每種資料都要測5次。

thread number :設定進行測試工作的執行緒個數。number即個數。主線程並不算在number內。例如,命令「thread 2」表示同時建立2個工作執行緒進行併發測試。

go:按照設定的引數建立工作執行緒,開始測試。主線程仍然在命令列等待使用者命令。

status:列印所有工作執行緒的工作狀態,包括它們的當前進度和測試結果等。

abort:停止測試。讓所有工作執行緒都退出。

exit:停止測試並退出程式。

在識別出使用者的命令之後,可以進行的操作有建立執行緒,並將結構體中的資訊標誌位的設定,各種資訊的列印等等,就不一一贅述了。

對任一被測記憶體單元,先寫入乙個數,再從該單元讀出,比較寫入和讀出的數是否相等。**如下:

void* test(void* tag)

{ int i,j,k;

char* beginaddr;

info[(int)tag].stopflag = 0; //running

size = size / threadnum;

beginaddr = mem + ((int)tag)*size;

srand(time(null));

testdata[4] = (char)rand();

for(i=0; i

如何實現abort功能的。

除了第一次實驗沒有寫之外,總算堅持把剩下的每一次都寫完了。感謝每乙個閱讀的你!

使用者級執行緒和核心級執行緒

根據在使用者空間還是在核心實現多執行緒機制,執行緒又被分為使用者級執行緒 user level thread 和核心級執行緒 kernel level thread 有關執行緒的所有管理工作都有在使用者級實現的執行緒庫來支援。使用者級執行緒庫是用於使用者級執行緒管理的例程包,支援執行緒的建立 終止,...

使用者級執行緒和核心級執行緒

執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現之間的較大的區別之一就是它們的模式以及要指...

使用者級執行緒和核心級執行緒

6.1.1 使用者級執行緒和核心級執行緒 執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現...