每個訊息都是乙個有優先順序的記錄,程序寫入訊息前,不需要有其它程序在等待訊息。訊息佇列具有隨核心的持續性。
posix
訊息佇列與
system v
訊息佇列的兩個主要區別:
1.posix
讀返回最高優先順序的最早訊息,
system v
返回指定優先順序的最早訊息。
2.向空佇列放置乙個訊息時,
posix
可以產生乙個訊號或啟動乙個執行緒。
mq_open
:開啟或建立訊息佇列,除了可選的
attr
引數外,與
open
類似。mq_close
:關閉訊息佇列,與
close
類似。mq_unlink
:帶引用計數的刪除,與
unlink
類似。mq_getattr
和mq_setattr
函式:獲取和設定訊息佇列的屬性。
struct mq_attr
int mq_send(mqd_t mqdes, const char *ptr, size_t len, unsigned int prio);
ssize_t mq_receive(mqd_t mqdes, const char *ptr, size_t len, unsigned int *priop);
mq_receive
的len
引數不能小於訊息佇列的
mq_msgsize
的大小。
posix
允許長度為
0的訊息,但不具備有效標識訊息傳送者的特性。
1.mq_maxmsg
最大訊息數。
2.mq_msgsize
最大訊息長度。
3.mq_open_max
同時開啟的訊息佇列的最大數目。
4.mq_prio_max
優先順序的最多級數。
mq_notify
提供了非同步事件通知功能,在某個空訊息佇列被放置一條訊息時,會向註冊的程序傳送指定訊號或啟動乙個執行緒。
int mq_notify(mqd_t mqdes, const struct sigevent *notification);
1.乙個佇列在任意時刻只有乙個程序能夠註冊這個通知。
2.只有當前註冊通知的程序可以撤銷這個註冊,方法是傳入乙個空指標。3.因
mq_receive
而阻塞的程序比註冊了通知的程序優先獲得訊息。
4.通知被傳送到註冊程序後,該註冊被撤銷。
posix
實時訊號指值在
sigrtmin
和sigrtmax
之間的一系列訊號,在
sigaction
呼叫中指定
sa_siginfo
標誌的話,實時訊號能提供一些***的、可靠的實時行為。
實時行為隱含特性:
1.訊號是排隊的,阻塞期間同一訊號產生多次,那麼解除阻塞後該訊號會遞交多次。
2.多個實時訊號排隊時,值較小的訊號優先遞交。
3.實時訊號能攜帶更多資訊。
4.有使用實時訊號工作的新函式。
UNIX網路程式設計卷二 筆記 讀寫鎖和記錄上鎖
讀寫鎖用於讀取資料比修改資料更頻繁的場景,它的分配規則如下 1.沒有執行緒持有寫鎖時,任意多的執行緒可以持有讀鎖。2.僅當沒有執行緒持有讀鎖或寫鎖時,才能分配寫鎖。當已有執行緒持有讀鎖時,另一線程申請寫鎖則會阻塞,若後續還有讀鎖的申請,此時有兩種策略 1.對後續的讀鎖請求都通過,可能會造成因讀鎖不斷...
《UNIX網路程式設計 卷2》 筆記 管道
管道是最初的unix ipc形式,它的侷限性在於沒有名字,只能在有親緣關係的程序間使用。後來,fifo出現了,fifo也稱為有名管道。管道和fifo都使用read和write函式訪問。include int pipe int fd 2 管道由pipe函式建立,返回兩個描述符 fd 0 用來讀,fd ...
《UNIX網路程式設計 卷1》 筆記 UNIX域協議
unix域協議並不是乙個實際的協議族,而是在單個主機上客戶程序和伺服器程序之間通訊的一種方法。unix域使用的套接字結構如下 struct sockaddr un int main int argc,char argv 執行結果如下 可以看到繫結的路徑名 tmp 123 現在是乙個套接字檔案。uni...