Presentation is loading. Please wait.

Presentation is loading. Please wait.

2019 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab10 1.

Similar presentations


Presentation on theme: "2019 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab10 1."— Presentation transcript:

1 2019 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab10 1

2 目錄 Contents 條件變數介紹 Beaglebone 條件變數範例 Beaglebone 實作 Beaglebone 2

3 1-1 條件變數介紹 條件變數(Condition Variable)
條件變數(Condtion Variable)是在多執行緒程序中用來實現“等待->喚醒”邏輯常用的方法。 Ex:應用程序A中包含兩個執行緒t1和t2。t1需要在bool變數test_cond為true時才能繼續執行,而test_cond的值是由t2來改變的。 方法有兩種: t1定時的去輪詢變量test_cond,如果test_cond為false,則繼續休眠;如果test_cond為true,則開始執行。 t1在test_cond為false時呼叫cond_wait進行等待,t2在改變test_cond的值後,呼叫cond_signal,喚醒在等待中的t1,告訴t1 test_cond的值變了,這樣t1便可繼續往下執行。 很明顯,上面兩種方案中,第二種方案是比較優的。在第一種方案中,在每次輪詢時,如果t1休眠的時間比較短,會導致cpu嚴重浪費;如果t1休眠的時間比較長,又會導致應用邏輯處理不夠及時,使應用程序性能下降。第二種方案就是為了解決輪詢的弊端。 3

4 1-2 條件變數介紹 條件變數(Condition Variable) 函式宣告: 標頭檔:
pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr); 初始化 #include <pthread.h> 說明: int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex); 等待某個條件 鎖定和解除鎖定 cond 變數,採用互斥的方式,同時間內只 有一個Thread 可以鎖定cond,其他的Thread 會被Block 住,和上mutex 不同的是喚醒功能。而且必須依靠Mutex 保護才能使用。 int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime); 多了一時間參數,過abstime段時間後,即使條件變數不滿足,mutex也被解除 傳回值: int pthread_cond_signal(pthread_cond_t *cond); 喚醒在wait 同一個條件的中的一個Thread 傳回 0 代表成功,非0 代表失敗 4

5 1-3 條件變數介紹 條件變數(Condition Variable) Q. 為什麼要與pthread_mutex 一起使用呢?
A. 這是為了應對執行緒1在呼叫pthread_cond_wait()但執行緒1還沒有進入wait cond的狀態的時候,此時執行緒2呼叫了 cond_singal 的情況。 如果不用mutex鎖的話,這個cond_singal就丟失了。加了鎖的情況是,執行緒2必須等到 mutex 被釋放(也就是 pthread_cod_wait() 進入wait_cond狀態 並自動釋放mutex) 的時候才能呼叫cond_singal. 5

6 條件變數範例 2-1 條件變數程式碼 gcc --std=c99 test1.c -o test1 -lpthread 6

7 條件變數範例 7

8 實作課本第六章的project2 (使用附件程式)
8

9 Thanks 作業系統實習 Operating Systems


Download ppt "2019 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A Lab10 1."

Similar presentations


Ads by Google