條件變數是執行緒可用的另一種同步機制。條件變數給多個執行緒提供了乙個回合的場所。條件變數與互斥量一起使用時,允許執行緒以無競爭的方式等待鐵定的條件發生。
名稱:pthread_cond_wait/pthread_cond_timedwait
目標:
條件變數等待
標頭檔案:
#include < pthread.h>
函式原形:
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t mytex,const struct timespec *abstime);
引數:
cond 條件變數
mutex 互斥鎖
返回值:
成功返回0,出錯返回錯誤編號。
第乙個引數*cond是指向乙個條件變數的指標。第二個引數*mutex則是對相關的互斥鎖的指標。
使用pthread_cond_wait等待條件變數變為真。
傳遞給pthread_cond_wait的互斥量對條件進行保護。呼叫者把鎖住的互斥量傳給函式,函式自動把呼叫執行緒放到等待條件的執行緒列表上,
對互斥量解鎖。這就關閉了條件檢查和執行緒進入休眠狀態等待條件改變這兩個操作之間的時間通道,這樣執行緒就不會錯過條件的。pthread_cond_wait返回時,互斥量再次被鎖住。
子執行緒迴圈
10 次,接著主線程迴圈
100
次,接著又回到子執行緒迴圈
10 次,接著再回到主線程又迴圈
100
次,如此迴圈
50次,試寫出**
#include #include #include #define loop 50
int num = 0;
int sub_parm = 0;
int main_parm = 1;
pthread_mutex_t mylock = pthread_mutex_initializer;
pthread_cond_t qready = pthread_cond_initializer;
void* thread_func(void *arg)
return (void*) 0;
}int main()
pthread_join(tid, &tret);
}
主線程和子執行緒
子執行緒通過 handlerthread的thread.getlooper 繫結,在主線程的handler的handlermessage中呼叫threadhandler.sendmessagedelay msg,1000 向子執行緒傳送訊息。在子執行緒中通過handler.sendmessagede...
主線程和子執行緒
主線程負責管理由它建立的子執行緒,建立 啟動 掛起 停止等。主線程通過發訊息的方式管理子執行緒,例如,給子執行緒傳送start 訊息,子執行緒啟動,子執行緒執行入口的run 方法。thread有下面兩個構造方法 thread runnable target,string name thread ru...
主線程和子執行緒總結
執行結果 從上面可以看到 如果主線程和子執行緒是並行的,雖然都是用while 1 但是倚靠 cpu的排程,主線程和子執行緒都有機會得到執行。如果要在子執行緒裡面改變主線程裡面的資料,就在 pthread create 裡面的最後 乙個引數使用傳位址呼叫 void c,否則使用傳值呼叫 void c ...