Linux核心開發之並發控制(五)

來源:互聯網
上載者:User

"小濤,還有多少啊,你看我本來就開玩笑似的說說火車票,飛機票的事,看MM的事,你在眉飛色舞,雞飛狗跳的沒完了呢…”

"啊?怎麼這樣呢,本來一個寢室,做人的差別就那麼大囁,平時不好好學習,有問題了問我,給你免費教學,還滿腹牢騷,也太不夠朋友了吧…."我錘著桌子說.

"朋友,我還不夠朋友啊,你沒聽說嗎:朋友為我,兩肋插刀,我為朋友,插它兩刀..“小王打斷我,”聽你念經似的,都三個小時了,你瞧,都來五了,怎麼,你還想和老易的品三國pk一下誰的集..“

  想想我也無語了,太陽起了又落,落了又起;花兒也不知開了幾次,都懶得理我了,我也尋思這個並發控製為啥就講不完呢..後面還有精彩的沒說呢,不能在這裡就把小王的勁頭給扼殺了…”好了,你也別唧唧歪歪,嘟嘟倫倫了,我發誓,對燈發誓,如果這節還講不完,你GF的事,我給你解決了,還不行嗎”我是無奈了。

“這感情好..”一聽到MM的話題,小王總是有說不完的激情,沒辦法,做人的差距還就是那麼大.

言歸正傳,話說...

出招表十:讀寫訊號量(不是吧,都十了,怪不得小王不耐煩了,這麼多招式,相當你,我有九陽神功護體還沒這麼快呢..哎)

“小王,你記得不,我在前邊提到過一招,說的是:防讀不防寫…“

"記得,有MM,我就記得,沒有那就好說了..“

“得得,不問你了,三句不離XXX”

  傳說中:讀寫訊號量可允許N個讀執行單元同時訪問共用資源,而最多隻能有一個寫執行單元。

“我想起來了,想起來了,就是和前邊的那個什麼----防出不防進…..差不多…”想想小王那副口水哈子吊多長的樣子,我都懶的理他了..

使用方法:1)定義和初始化讀寫訊號量

              struct rw_semphore my_rws;    //定義讀寫訊號量

              void init_rwsem(struct rw_semaphore *sem);    //初始化讀寫訊號量

              2)讀訊號量擷取

              void down_read(struct rw_semaphore *sem);

              int down_read_try(struct rw_semaphore *sem);

              3)讀訊號量釋放

              void up_read(struct rw_semaphore *sem);

              4)寫訊號量擷取

              void down_write(struct rw_semaphore *sem);

              int down_write_try(struct rw_semaphore *sem);

              5)寫訊號量釋放

              void up_write(struct rw_semaphore *sem);

給個例子吧:

rw_semaphore rw_sem;//定義讀寫訊號量init_rwsem(&rw_sem);//初始化讀寫訊號量//讀時擷取訊號量down_read(&rw_sem);...//臨界資源up_read(&rw_sem);//寫時擷取訊號量down_write(&rw_sem);...//臨界資源up_write(&rw_sem);

 

說句真的,如果小王賴上我給他找個MM,我還心裡真沒底,所以嗎,下面說最最最最後一招,我也就解放了哦…

出招表十一:互斥體(啥叫互斥體,怎麼感覺前邊的都是互斥體,呵呵,確實,只不過Linux開發人員們覺得不過癮,就專門研究了一個互斥體,誰讓咱用人家的東西呢)

使用方法:1)定義並初始化互斥體

              struct mutex my_mutex;

              mutex_init(&my_mutex);

             2)擷取互斥體

              void fastcall mutex_lock(struct mutex *lock);//引起的睡眠不能被打斷

              int fastcall mutex_lock_interruptible(struct mutex *lock);//可以被打斷

              int fastcall mutex_lock_trylock(struct mutex *lock);//嘗試獲得,擷取不到也不會導致進程休眠

             3)釋放互斥體

              void fastcall mutex_unlock(struct mutex *lock);

給個例子:

struct mutex my_mutex;   //定義mutex

mutex_init(&my_mutex);

 

mutex_lock(&my_mutex);

….//臨界資源

mutex_unlock(&my_mutex);

 

完了,一切都完了,有關並發控制的相關招數都完了,小王也該放心去追MM了,有我這幾招,看誰還敢競爭,我也不用愁了,總算在這一集講完了本不該講完的東西..

如果有需要,我會給大家講一節有關載入了並發控制的字元裝置驅動程式,名字我都想好了---需要的請舉手,火熱招標中哈..

不好意思,人在江湖走,怎能不濕腳,不小心做起廣告來了…

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.