Linux多线程同步之消息队列有何特点?
Linux多线程同步之消息队列有何特点?
消息队列是消息的链表,存放在内核中并有消息队列标示符标示。 msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息加入到消息队列中;每个消息包括一个long型的type;和消息缓存;msgrcv用于从队列中取出消息;取消息很智能,不一定先进先出 ①msgget,创建一个新队列或打开一个现有队列 #include int msgget ( key_t key, int flag ); //成功返回消息队列ID;错误返回-1 ②msgsnd: 发送消息 #include int msgsnd( int msgid, const void* ptr, size_t nbytes, int flag ) //成功返回0,错误返回-1 a: flag可以指定为IPC_NOWAIT; 若消息队列已满,则msgsnd立即出错返回EABAIN; 若没指定IPC_NOWAIT; msgsnd会阻塞,直到消息队列有空间为止 ③msgrcv: 读取消息: ssize_t msgrcv( int msgid, void* ptr, size_t nbytes, long type, int flag ); a。
type == 0; 返回消息队列中第一个消息,先进先出 b。 type > 0 返回消息队列中类型为tpye的第一个消息 c。 type < 0 返回消息队列中类型 <= |type| 的数据;若这种消息有若干个,则取类型值最小的消息 消息队列创建步骤: #define MSG_FILE "。
" struct msgtype { long mtype; char buffer[BUFFER+1]; }; if((key=ftok(MSG_FILE,'a'))==-1) { fprintf(stderr,"Creat Key Error:%s\n", strerror(errno)); exit (1); } if((msgid=msgget(key, IPC_CREAT | 0666/*PERM*/))==-1) { fprintf(stderr,"Creat Message Error:%s\n", strerror(errno)); exit (1); }。
答:2、WM_COPYDATA效率上面不是太高,如果要求高效率,可以考虑使用共享内存(SharedMemory)详情>>
问:同事ip:10.101.107.28 我的IP:10.101.104.23我们在...
答:你们公司是WINDOWS域环境吗,如果是的话,你在网上邻居里应该能看到对方的主机。让她把文件夹共享出来就可以。 如果不是WINDOWS域,那得看你们是不是在一个...详情>>
问:数据结构顺序表的建立,可定义顺序表 #define maxnum elemtyp...
答:打开VC ,然后点击新建,出来界面之后选择Win32 Console Application并输入工程的名称和选择项目的位置,然后出现“一个空工程”,在点击“...详情>>