zoukankan      html  css  js  c++  java
  • 多进程间通信方式和多线程同步机制总结

    多进程之间通信方式:

              文件映射:本地之间

              共享内存:本地之间

              匿名管道:本地之间

              命名管道:跨服务器

              邮件槽:一对多的传输数据,通常通过网络向一台Windows机器传输

              剪切板:本地之间

              socket:跨服务器

    多线程之间通信方式:

              全局变量

              自定义消息响应

    多线程之间同步机制:

              临界区:不可以跨进程,忘记解锁会无限等待,要么存在要么没有,多线程访问独占性共享资源

              互斥量:可以跨进程,忘记解锁会自动释放,要么存在要么没有

              事件:又叫线程触发器,不可以跨进程,要么存在要么没有,一个线程来唤醒另一个线程(包括自动和人工两种方式)

              信号量:可以跨进程,始终代表可用资源数量,当资源数为o时,线程阻塞,允许多个线程同时访问一个共享资源

    多线程程序:

              多线程程序是并发执行,对于多线程的共用资源不能保证能被正确利用即不保证能被独占,并发执行的时候,哪个线程得到运行的机会是随机的也是不可预期。为了解决

    多线程中某个线程对资源的独占(也就是多线程同步问题),只允许一个线程拥有共享资源的独占。即多线程之间的同步机制。

    线程:

               线程包括两个方面:第一:线程内核对象(OS用来存放统计信息的地方);第二:线程堆栈(函数参数和局部变量)

               线程在它的进程的地址空间执行代码。内核对象句柄依赖于进程而存在。

               创建线程函数后建议立刻关闭句柄closehandle();

    Windows API中提供了建立新的线程的函数CreateThread:

                MSDN中CreateThread原型:

                 HANDLE CreateThread(
     
                 LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性
                
                 DWORD dwStackSize, // 堆栈大小
                
                  LPTHREAD_START_ROUTINE lpStartAddress, // 线程函数
                
                 LPVOID lpParameter, //线程参数
                
                 DWORD dwCreationFlags, // 线程创建属性
                
                 LPDWORD lpThreadId // 线程ID
                 );

     返回值:

                 在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回

  • 相关阅读:
    SpringBoot自动装配源码
    对称加密、非对称加密、数字签名
    k8s部署mysql数据持久化
    docker部署 springboot 多模块项目+vue
    ES入门及安装软件
    prometheus入门介绍及相关组件、原理讲解
    流水线 Sonar 代码扫描
    postgresql数据库 查询表名、备注及字段、长度、是否可控、是否主键等信息
    Helm中Tiller镜像下载失败的解决办法
    程序员孔乙己
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/6978026.html
Copyright © 2011-2022 走看看