Posted on 2008-08-26 15:01
Prayer 閱讀(6333)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
我現(xiàn)在有一個(gè)程序,是做成了多進(jìn)程同時(shí)從一個(gè)消息隊(duì)列中取消息,都以阻塞的方式,從消息隊(duì)列中順序取消息,但是多進(jìn)程同時(shí)取的時(shí)候我沒有加鎖,不知道這樣會(huì)不會(huì)出現(xiàn)什么問題?操作系統(tǒng)應(yīng)該對(duì)進(jìn)程有個(gè)排隊(duì)的操作吧?
不會(huì)有什么問題,OS保證操作的原子性,即不可能出現(xiàn)一條消息被幾個(gè)進(jìn)程各收取一部分的情況。但具體是哪個(gè)進(jìn)程收到消息則是隨機(jī)的。
我在寫一個(gè)程序,父進(jìn)程負(fù)責(zé)循環(huán)從消息隊(duì)列中讀取消息,如果有消息則生成子進(jìn)程處理消息并將處理結(jié)果寫入另一消息隊(duì)列,而主進(jìn)程繼續(xù)讀取消息,這樣有很多消息時(shí)就會(huì)并發(fā)出很多子進(jìn)程處理消息并寫入同一消息隊(duì)隊(duì)列,我想問一下
在多個(gè)子進(jìn)程同時(shí)向一個(gè)消息隊(duì)列寫時(shí)要不要進(jìn)行互斥操作?請有經(jīng)驗(yàn)的高手不吝賜教,非常感謝!
消息隊(duì)列是個(gè)隊(duì)列,送進(jìn)去的消息會(huì)排隊(duì),所以不會(huì)有“同一個(gè)消息”的情況
讀操作是根據(jù)mtype來區(qū)分不同的消息的,當(dāng)某個(gè)消息寫入后,如果讀進(jìn)程退出了,這個(gè)消息會(huì)堵在消息隊(duì)列里,多了就會(huì)造成消息隊(duì)列堵塞,任何進(jìn)程寫消息隊(duì)列都會(huì)失敗,造成系統(tǒng)的不可用,這時(shí)要注意讀、寫進(jìn)程的配合,這也是用消息隊(duì)列最不爽的地方!
還有,好象消息隊(duì)列不支持peek的方法?
我以前做過這樣一個(gè)程序,因?yàn)橐獙懙揭粋€(gè)文件中的不同段中,所以用了這種方式,要注意的一點(diǎn)就是程序異常退出之后需要對(duì)該隊(duì)列做相應(yīng)處理。
請教多進(jìn)程寫消息隊(duì)列問題
消息隊(duì)列不必互斥。