linux-使用互斥锁完成多进程同步
2011-10-12 13:08
246 查看
#include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <unistd.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> int main(void){//2个进程,一个进程完成每次加1,另一个进程完成每次加2,2个进程协作完成累加,使用共享内存方式在进程间通信 int *x; int rt; int shm_id; char *addnum="myadd"; char *ptr; pthread_mutex_t mutex;//互斥对象 pthread_mutexattr_t mutexattr;//互斥对象属性 pthread_mutexattr_init(&mutexattr);//初始化互斥对象属性 pthread_mutexattr_setpshared(&mutexattr,PTHREAD_PROCESS_SHARED);//设置互斥对象为PTHREAD_PROCESS_SHARED共享,即可以在多个进程的线程访问,PTHREAD_PROCESS_PRIVATE为同一进程的线程共享 rt=fork();//复制父进程,并创建子进程 //deepfuture.iteye.com,深未来技术原创 if (rt==0){//子进程完成x+1 shm_id=shm_open(addnum,O_RDWR,0); ptr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);/*连接共享内存区*/ x=(int *)ptr; for (int i=0;i<10;i++){//加10次。相当于加10 pthread_mutex_lock(&mutex); (*x)++; printf("x++:%d\n",*x); pthread_mutex_unlock(&mutex); sleep(1); } } else{//父进程完成x+2 shm_id=shm_open(addnum,O_RDWR|O_CREAT,0644); ftruncate(shm_id,sizeof(int)); ptr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);/*连接共享内存区*/ x=(int *)ptr; for (int i=0;i<10;i++){//加10次,相当于加20 pthread_mutex_lock(&mutex); (*x)+=2; printf("x+=2:%d\n",*x); pthread_mutex_unlock(&mutex); sleep(1); } } shm_unlink(addnum);//删除共享名称 munmap(ptr,sizeof(int));//删除共享内存 return(0); }
转自:/article/3763316.html
相关文章推荐
- [Linux线程]线程的同步--使用互斥锁完成线程同步
- [Linux线程]线程的同步--使用条件变量完成线程同步
- Linux使用rsync客户端与服务端同步目录进行备份
- Linux多线程 互斥锁与条件变量使用
- 【原创】互斥锁使用分析 分类: Linux --- 应用程序设计 2015-07-22 11:57 6人阅读 评论(0) 收藏
- LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8
- Linux下使用thrift完成RPC服务
- 【Linux】使用sed、awk来完成批量修改配置文件的shell设计
- Linux 线程与互斥锁的使用
- Linux 下使用 rsync 同步文件
- Linux多线程——使用互斥量同步线程
- 在linux下使用shell脚本自动化完成hadoop集群搭建
- Linux/Unix下使用rsync同步文件(简单的例子)
- 使用rsync进行linux和windows文件同步
- Linux下使用rsync同步文件
- 在sublime中使用sftp同步编辑远程Linux文件
- Linux下同步工具inotify+rsync使用详解【理论篇】
- linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断 .
- linux LVM快照创建详细步骤(使用PE完成)
- Linux下使用rsync实现主备机代码同步