linux-使用互斥锁完成多进程同步
来源:互联网 发布:软件使用规章制度 编辑:程序博客网 时间:2024/05/16 07:18
#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); }
转自:http://deepfuture.iteye.com/blog/760860
- linux-使用互斥锁完成多进程同步
- linux 多线程 多进程同步
- linux 多进程线程同步
- linux 信号量 同步多进程
- 使用rsync完成Linux服务器间同步目录
- 使用Jquery 完成同步请求
- linux 下多进程的同步
- 【Linux多进程同步】记录锁
- linux 进程同步
- Linux进程同步
- linux 进程同步机制
- linux进程同步机制
- Linux进程同步机制
- Linux父子进程同步
- Linux进程同步
- linux进程间同步
- linux----进程同步
- Linux进程同步机制
- ANT
- C++模板简介
- 不富都难的理财习惯
- java.lang.UnsatisfiedLinkError: Can't load library from JNI code
- linux上的GetTickCount函数
- linux-使用互斥锁完成多进程同步
- 如何提高自己的气场
- UIApplicationDelegate协议解读
- 要养成良好的书写SQL的习惯
- 如何解决Apache Range Header DOS攻击
- Visual Studio Team System解决方案系列课程
- context_switch( )上下文切换
- 使用7-zip备份我的桌面(版本三)
- 问模板函数、函数模板,模板类、类模板的区别的问题