互斥鎖與條件變量的語義
互斥鎖,我要對一塊共享數據操作,但是我怕同時你也操作,那就亂套了,所以我要加鎖,這個時候我就開始操作這塊共享數據,而你進不了臨界區,等我操作完了,把鎖丟掉,你就可以拿到鎖進去操作了
條件變量,我要看一塊共享數據里某一個條件是否達成,我很關心這個,如果我用互斥鎖,不停的進入臨界區看條件是否達成,這簡直太悲劇了,這樣一來,我醒的時候會占CPU資源,但是卻干不了什么時,只是頻繁的看條件是否達成,而且這對別人來說也是一種損失,我每次加上鎖,別人就進不了臨界區干不了事了。好吧,輪詢總是痛苦的,咱等別人通知吧,于是條件變量出現了,我依舊要拿個鎖,進了臨界區,看到了共享數據,發現,咦,條件還不到,于是我就調用pthread_cond_wait(),先把鎖丟了,好讓別人可以去對共享數據做操作,然后呢?然后我就睡了,直到特定的條件發生,別人修改完了共享數據,給我發了個消息,我又重新拿到了鎖,繼續干俺要干的事情了……