`
deepfuture
  • 浏览: 4335521 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79445
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68425
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101560
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281325
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14622
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65625
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31341
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45239
社区版块
存档分类
最新评论

linux-多线程-互斥锁在多进程共享

阅读更多

#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);
}

 编译

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


1
0
分享到:
评论

相关推荐

    linux多线程编程

    linux多线程编程 声明:本文是网上整理的资料,版权属其作者本人所有。 1 第一章 线程基础知识 2 一.什么是线程 2 二.线程的优点 2 三.线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程...

    linux系统下多线程编程文档资料

    四、条件变量与互斥锁、信号量的区别 55 第六章 共享内存 56 一、什么是共享内存区 56 二、mmap 56 三、posix共享内存函数 60 四、ftruncate和fstat函数 62 五、共享内存区的写入和读出 64 六、程序例子 65

    Linux系统编程之线程同步

    所以,互斥锁实质上是操作系统提供的一把“建议锁”(又称“协同锁”),建议程序中有多线程访问共享资源的时候使用该机制。但,并没有强制限定。 因此,即使有了mutex,如果有线程不按规则来访问数据,依然会造成...

    Linux线程同步之互斥量(mutex)

    当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。  互斥量,从字面上可以知道是相互排斥的意思,它是基本的同步工具,用于保护临界区(共享资源),以保证在任何...

    Linux网络编程 视频 教程

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一...

    linux中各种锁机制的使用与区别详解

    例如,进程间通信的机制之一:共享内存(在这里不做详解):多个进程可同时访问同一块内存。如果不对访问这块内存的临界区进行互斥或者同步,那么进程的运行很可能出现一些不可预知的错误和结果。 接下来我们了解三...

    linux网络编程

    N:M混合线程模型 37POSIX线程(一) POSIX线程库相关函数 用线程实现回射客户/服务器 38POSIX线程(二) 线程属性 线程特定数据 39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 ...

    C++教程网《Linux网络编程》视频百度云地址

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一...

    c++教程网的linux网络编程视频下载

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一...

    2018年C++教程网的linux网络编程视频共41集百度云下载链接.rar

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一个简单的...

    [免费]2018年C++教程网的linux网络编程视频百度云下载链接.rar

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一...

    嵌入式Linux应用程序开发标准教程(第2版全)

    7.4.1 编写多进程程序 7.4.2 编写守护进程 7.5 本章小结 7.6 思考与练习 第8章 进程间通信 8.1 Linux下进程间通信概述 8.2 管道 8.2.1 管道概述 8.2.2 管道系统调用 8.2.3 标准流管道 8.2.4 FIFO 8.3 信号 8.3.1 ...

    linux programming instances网络编程教程 附源代码

    全书由13章组成,内容涉及到Lindx系统编程基础、TCP/UDP协议、套接字编程概念及I/O模型、高级编程中需要用到的进程问通信同步、多路复用、多线程编程和一些高级套接字控制方法、IPv6介绍以及网络安全等。...

    C++教程网视频:linux网络编程

    39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一...

    Linux高性能服务器编程

    多线程编程 14.1 Linux线程概述 14.1.1 线程模型 14.1.2 Linux线程库 14.2 创建线程和结束线程 14.3 线程属性 14.4 POSIX信号量 14.5 互斥锁 14.5.1 互斥锁基础API 14.5.2 互斥锁属性 14.5.3 死锁举例 ...

    UNIX网络编程 卷2 进程间通信 带完整书签,完整目录

    16.2 多线程化 330 16.3 服务器捆绑 333 16.4 认证 336 16.5 超时和重传 338 16.6 调用语义 342 16.7 客户或服务器的过早终止 343 16.8 XDR:外部数据表示 345 16.9 RPC分组格式 361 16.10 小结 365 习题 ...

    Linux程序设计 第4版.haozip01

    12.8 多线程 438 12.9 小结 442 第13章 进程间通信:管道 443 13.1 什么是管道 443 13.2 进程管道 444 13.3 将输出送往popen 445 13.3.1 传递更多的数据 446 13.3.2 如何实现popen 447 13.4 pipe调用 449 ...

    网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

     15.3.3 多进程的并发服务器和多线程的并发服务器  15.3.4 客户端进程的多线程化  本章小结 第十六章 网络售票系统的简单模拟  16.1 系统的总体设计  16.1.1 应用的说明  16.1.2 数据格式的...

    Linux程序设计 第4版.haozip02

    12.8 多线程 438 12.9 小结 442 第13章 进程间通信:管道 443 13.1 什么是管道 443 13.2 进程管道 444 13.3 将输出送往popen 445 13.3.1 传递更多的数据 446 13.3.2 如何实现popen 447 13.4 pipe调用 449 ...

    Alibaba:阿里巴巴后段架构师技术图谱

    《后端架构师技术图谱》更新于20180624二叉查找树...& 非公平锁悲观锁乐观锁 & CASABA 问题CopyOnWrite容器RingBuffer可重入锁 & 不可重入锁互斥锁 & 共享锁死锁操作系统计算机原理CPU多级缓存进程线程协程Linux设计

Global site tag (gtag.js) - Google Analytics