linux-多线程互斥锁在--多进程--中的使用

  1. #include <sys/stat.h>  
  2. #include <fcntl.h>  
  3. #include <sys/mman.h>  
  4. #include <unistd.h>  
  5.   
  6.   
  7. #include <pthread.h>  
  8. #include <stdio.h>  
  9. #include <stdlib.h>  
  10.   
  11.   
  12.   
  13.   
  14. int main(void){//2个进程,一个进程完成每次加1,另一个进程完成每次加2,2个进程协作完成累加,使用共享内存方式在进程间通信  
  15.   
  16. int *x;  
  17. int rt;  
  18. int shm_id;  
  19. char *addnum="myadd";  
  20. char *ptr;  
  21.   
  22. pthread_mutex_t mutex;//互斥对象  
  23. pthread_mutexattr_t mutexattr;//互斥对象属性  
  24.   
  25.   
  26.    pthread_mutexattr_init(&mutexattr);//初始化互斥对象属性  
  27.    pthread_mutexattr_setpshared(&mutexattr,PTHREAD_PROCESS_SHARED);//设置互斥对象为PTHREAD_PROCESS_SHARED共享,即可以在多个进程的线程访问,PTHREAD_PROCESS_PRIVATE为同一进程的线程共享  
  28.    rt=fork();//复制父进程,并创建子进程   
  29. //deepfuture.iteye.com,深未来技术原创  
  30.    if (rt==0){//子进程完成x+1  
  31.        shm_id=shm_open(addnum,O_RDWR,0);  
  32.        ptr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);/*连接共享内存区*/  
  33.        x=(int *)ptr;    
  34.     
  35.       for (int i=0;i<10;i++){//加10次。相当于加10  
  36.        pthread_mutex_lock(&mutex);        
  37.        (*x)++;  
  38.        printf("x++:%d\n",*x);  
  39.        pthread_mutex_unlock(&mutex);   
  40.        sleep(1);                   
  41.       }  
  42.    }     
  43.    else{//父进程完成x+2  
  44.        shm_id=shm_open(addnum,O_RDWR|O_CREAT,0644);  
  45.         ftruncate(shm_id,sizeof(int));  
  46.         ptr=mmap(NULL,sizeof(int),PROT_READ|PROT_WRITE,MAP_SHARED,shm_id,0);/*连接共享内存区*/  
  47.         x=(int *)ptr;   
  48.             
  49.       for (int i=0;i<10;i++){//加10次,相当于加20  
  50.        pthread_mutex_lock(&mutex);         
  51.        (*x)+=2;  
  52.        printf("x+=2:%d\n",*x);  
  53.        pthread_mutex_unlock(&mutex);    
  54.        sleep(1);   
  55.       }        
  56.         
  57.    }   
  58.    shm_unlink(addnum);//删除共享名称  
  59.    munmap(ptr,sizeof(int));//删除共享内存  
  60.    return(0);  
  61. }  

 编译

deepfuture@deepfuture-laptop:~/private/mytest$ gcc  -lpthread -std=c99 -lrt -o testmutex testmutex.c


执行


deepfuture@deepfuture-laptop:~/private/mytest$ ./testmutex

x+=2:2

x++:3

x+=2:5

x++:6

x+=2:8

x++:9

x+=2:11

x++:12

x+=2:14

x++:15

x+=2:17

x++:18

x+=2:20

x++:21

x+=2:23

x++:24

x+=2:26

x++:27

x+=2:29

x++:30


http://deepfuture.iteye.com/blog/760860

你可能感兴趣的:(linux-多线程互斥锁在--多进程--中的使用)