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