:::danger 標題應提及你的 GitHub 帳號名稱,留意細節。 :notes: jserv ::: 測驗α 延伸問題一: step 1 - 插入0~98亂數100個 for (int i = 0; i < 100; ++i) treeint_insert(rand() % 99); step 2 - 使用遞迴透過紅黑樹右邊越大、左邊越小及最後點是NULL特性,昨為遞迴截止點。重紅黑樹最小的開始列印。 static void __treeint_dump(struct st_node *n, int depth) { if (!n) return; __treeint_dump(FFFF, depth + 1); struct treeint *v = treeint_entry(n); printf("%d\n", v->value); __treeint_dump(GGGG, depth + 1); } step 3 - 隨機移除0~98亂數100個 for (int i = 0; i < 100; ++i) { int v = rand() % 99; printf("%2d ", v); if ((i + 1) % 10 == 0) printf("\n"); treeint_remove(v); } ste4 - 重複step 2動作 測驗 β 延伸問題一: ```c static inline uintptr_t align_up(uintptr_t sz, size_t alignment) { uintptr_t mask = alignment - 1; if ((alignment & mask) == 0) { //二進位與 2 的冪剛好為0的特性判斷是否為 2 的冪。 return MMMM; } return (((sz + mask) / alignment) * alignment); //使用微軟程式設計計算機計算此式子是不用判斷2 的冪。透過ROUND取無條件捨去整數後做計算即可自動align up。不懂為什麼要判斷2 的冪,只能猜測跟效率有關。 } ``` :::warning 參見[解讀計算機編碼](https://hackmd.io/@sysprog/binary-representation) :notes: jserv ::: 測驗 γ 延伸問題一: /* Wait for work to be allocated. */ verify(pthread_mutex_lock(&qs->mtx_st)); //鎖住要保護的記憶體 while (qs->st == ts_idle) //當為ts_idle時,等待設定保護的條件變數signal發出 verify(pthread_cond_wait(&qs->cond_st, &qs->mtx_st)); //解鎖要保護的記憶體 verify(pthread_mutex_unlock(&qs->mtx_st)); //解鎖要保護的記憶體 if (qs->st == ts_term) { //當不為ts_idle時,想要做的事。 return NULL; verify(pthread_mutex_lock(&qs2->mtx_st)); //鎖住要保護的記憶體 qs2->st = ts_term; verify(pthread_cond_wait(&qs2->cond_st, &qs2->mtx_st));// 解鎖要保護的記憶體 verify(pthread_mutex_unlock(&qs2->mtx_st)); //解鎖要保護的記憶體