看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《littleboypis (littleboypis)》之銘言: : 想請教一下各位一個函數 : int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); : 為何 pthread_cond_wait 這個函數的參數需要傳入一個 mutex 呢 : 雖然看了他的解說但還不是很明瞭 為何 : 而且 另一個 int pthread_cond_signal(pthread_cond_t *cond); 也不需要 mutex : 為何 pthread_cond_wait 要傳入一個 mutex呢 : 謝謝 : 另外在 C 底下要怎麼達到多型 或者 Hooking呢 : 因為我想在程式呼叫 pthread_create 前做一些事情 : 謝謝 以我所知, 分別在於 race condition 用 signal 很容易出現 race condition. 比如 Thread A: send a job wait for signal 然後 Thread B: process incoming job signaling 看上來很正常, 是吧? 但萬一發生的時序是: Thread A Thread B send job process incoming job signaling wait for signal 這種情況下, A 就會很傻很天真的一直等下去了 condition 的做法就是加 mutex, 令到 wait for signal 之後才暫時 release mutex, 而這時候 thread B 才能 取得 mutex 做 signalling Thread A Thread B mutex acquire send job process inocming job 企圖 acquire mutex wait + release mutex mutex acquired signal wake up+企圖acquire mutex mutex release mutex acquired 這樣就避免了前面說的 race condition 了 Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82 ※ 編輯: adrianshum 來自: 202.155.236.82 (03/31 19:26) ※ 編輯: adrianshum 來自: 202.155.236.82 (03/31 19:28)
LPH66:推一個 之前對這東西的自行理解果然只有半吊子... 04/02 03:12
adrianshum:其實我也是自行理解的 XDD 萬一有錯希望大家指正嘍 04/02 15:57
sunneo:檢驗multiprocess的deadlock發生有點像是要舉所有subset 04/02 22:16