- 論壇徽章:
- 0
|
請問下面兩個函數(shù)的意思:
void g_cond_signal (GCond *cond);
void g_cond_wait (GCond *cond, GMutex *mutex);
下面是Glib Reference Manual里面的一個例子:
- GCond* data_cond = NULL; /* Must be initialized somewhere */
- GMutex* data_mutex = NULL; /* Must be initialized somewhere */
- gpointer current_data = NULL;
- void push_data (gpointer data)
- {
- g_mutex_lock (data_mutex);
- current_data = data;
- g_cond_signal (data_cond);
- g_mutex_unlock (data_mutex);
- }
- gpointer pop_data ()
- {
- gpointer data;
- g_mutex_lock (data_mutex);
- while (!current_data)
- g_cond_wait (data_cond, data_mutex);
- data = current_data;
- current_data = NULL;
- g_mutex_unlock (data_mutex);
- return data;
- }
復(fù)制代碼
是不是應(yīng)該這樣理解(我英文不行):當我調(diào)用了pop_data()的時候,如果current_data==NULL,那么pop_data()處于wait狀態(tài),直到其它線程調(diào)用了push_data(),這時push_data()會發(fā)送一個signal(g_cond_signal),然后把pop_data()激活。
這里是不是只有push一個元素的時候才能pop一個?如果我連續(xù)push兩個,而在這之間并沒有調(diào)用pop,那么g_cond_signal發(fā)送到Data_cond的信號怎么處理?還有就是這里的Data_mutex是在lock什么東西啊?
我基礎(chǔ)比較差,所以請大家多多指教! |
|