Nachos 課程設計task1 1

2021-06-26 23:49:09 字數 1163 閱讀 1525

nachos task1.1

要求:實現

kthread.join() 

方法。 該方法只被呼叫一次。

實現:join

方法是當乙個執行緒呼叫他時,當前執行的執行緒被掛起,該執行緒執行,直到該執行緒執行完後,當前執行緒才繼續執行。在這裡我們用訊號量的方法實現,具體的思路如下:當乙個執行緒呼叫

join

時,當前執行緒執行

p操作將自己掛起,呼叫執行緒開始執行,當呼叫執行緒執行完之後,即

finish

時,再將當前執行緒喚醒。**實現如下:

首先定義乙個訊號量:

private semaphore joinsignal = new semaphore(0);

join

的具體方法如下,當呼叫該方法時,

joinsignal進行p

操作public void join()

呼叫執行緒結束後需要將當前執行緒喚醒,所以在

finish

中加入喚醒的

v語句:

currentthread.joinsignal.v();

注意這句話需要加在

sleep

()之前,只有喚醒後才可以睡覺

接下來就是進行測試:

public static void jointest()

在public void selftest()

中進行測試:

kthread.jointest();

測試的結果如下:(執行緒

1是我們新建立的,呼叫

join

())this is join test:

*** thread 1 looped 0 times

*** thread 1 looped 1 times

*** thread 1 looped 2 times

*** thread 1 looped 3 times

*** thread 1 looped 4 times

*** thread 0 looped 0 times

*** thread 0 looped 1 times

*** thread 0 looped 2 times

*** thread 0 looped 3 times

*** thread 0 looped 4 times

程式設計TASK1

1.實現可以動態擴容的陣列 思路 新建陣列的時候,將陣列的容量大小設定為乙個變數,如果陣列容量不夠的時候,可以將原來資料擴大原來的幾倍,進行擴容 也可以直接使用c 中的vector容器,不必考慮原陣列的大小,如果需要增加元素,直接v.pushback 即可 2.將兩個有序陣列合併成乙個有序陣列 思路...

菜鳥學習TASK1

鴿子部第一次task當然不能鴿掉,但是進度很迷,所以打算先對照task把概要大概寫下,然後把發展方案寫下,然後再一點點完善細節。task 了解c語言的幾大資料型別 包括陣列與字串 了解ascii碼和char型別的關係,有興趣的可以進一步了解unicode。基礎資料型別 整型 短整型short,整型i...

陣列學習task1

1.利用動態陣列解決資料存放問題 編寫一段 要求輸入乙個整數n,用動態陣列a來存放2 n之間所有5或7的倍數,輸出該陣列。托普利茨矩陣問題 如果乙個矩陣的每一方向由左上到右下的對角線上具有相同元素,那麼這個矩陣是托普利茨矩陣。給定乙個m x n的矩陣,當且僅當它是托普利茨矩陣時返回true。def ...