Linux消息队列与线程实例理解
2016-01-13 20:23
567 查看
相较于进程,线程不仅拥有进程的并发性,相互独立等特点,更有占用资源较少,效率高等特点。
创建线程
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
其中thread为线程ID地址
attr 为属性设置
start_routine为函数指针
arg为start_routine函数的参数
退出线程
void pthread_exit(void *retval);
其中retval为返回给主线程的参数
等待线程退出
int pthread_join(pthread_t thread, void **retval);
其中thread为线程id
retval为捕获的线程退出后的参数
实例:通过消息队列月线程实现两进程互相传送消息并打印
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> #include <unistd.h> #include <pthread.h> struct msgbuf { long mtype; char mtex[40]; }; int msid; struct msgbuf msre,mswr; void * f(void * buf) { while(1)//子线程 { bzero(msre.mtex,40); if(msgrcv(msid,&msre,sizeof(msre),100,0)==-1)//从消息队列msid中,获取类型(mtype)为100的信息,放到msre中,未获得则阻塞 { perror("get massage fail"); exit(-1); } printf("massage : %s\n",msre.mtex); if(strcmp(msre.mtex,"end")==0) { msgctl(msid,IPC_RMID,NULL); exit(0); } printf("Please import massage or wait for massage:\n"); } } int main (void) { key_t key = ftok(".",123); msid = msgget(key,IPC_CREAT|0666); if(msid<0) { perror("get msgid fail"); return ; } mswr.mtype = 200; char a[40] = {'\0'}; pthread_t id; pthread_create(&id,NULL,f,NULL); printf("Please import massage or wait for massage:\n");//创建线程 while(1)//主线程 { bzero(mswr.mtex,40); gets(a); stpcpy(mswr.mtex,a); if(msgsnd(msid,&mswr,strlen(mswr.mtex),0)==-1)//将mswr中的内容放到消息队列msid中放入大小为strlen,未发送则阻塞 { perror("send fail"); return 0; } if(strcmp(msre.mtex,"end")==0) { msgctl(msid,IPC_RMID,NULL); exit(0); } printf("Please import massage or wait for massage:\n"); } pthread_join(id,NULL); }
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍