文档章节

线程间的通信、同步方式与进程间通信方式

m
 mirrorgdit
发布于 2016/04/11 14:56
字数 1700
阅读 96
收藏 2

精选30+云产品,助力企业轻松上云!>>>

1、线程间的通信方式
  • 使用全局变量
    主要由于多个线程可能更改全局变量,因此全局变量最好声明为violate

  • 使用消息实现通信
    在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。

    1)定义消息#define WM_THREAD_SENDMSG=WM_USER+20;  2)添加消息函数声明afx_msg int OnTSendmsg(); 
    3)添加消息映射ON_MESSAGE(WM_THREAD_SENDMSG,OnTSM) 
    4)添加OnTSM()的实现函数;5)在线程函数中添加PostMessage消息Post函数
  • 使用事件CEvent类实现线程间通信
    Event对象有两种状态:有信号和无信号,线程可以监视处于有信号状态的事件,以便在适当的时候执行对事件的操作。

    1)创建一个CEvent类的对象:CEvent threadStart;它默认处在未通信状态; 
    2)threadStart.SetEvent();使其处于通信状态; 
    3)调用WaitForSingleObject()来监视CEvent对象

2、线程间的同步方式

各个线程可以访问进程中的公共变量,资源,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。数据之间的相互制约包括
1、直接制约关系,即一个线程的处理结果,为另一个线程的输入,因此线程之间直接制约着,这种关系可以称之为同步关系
2、间接制约关系,即两个线程需要访问同一资源,该资源在同一时刻只能被一个线程访问,这种关系称之为线程间对资源的互斥访问,某种意义上说互斥是一种制约关系更小的同步

线程间的同步方式有四种


3、进程间通信方式

进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:
1、低级通信,控制信息的通信(主要用于进程之间的同步,互斥,终止和挂起等等控制信息的传递)
2、高级通信,大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等).


 

m
粉丝 3
博文 34
码字总数 36719
作品 0
深圳
高级程序员
私信 提问
加载中
请先登录后再评论。
20.进程与线程通信方式之间的差异

进程线程通信方式之间的差异 每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。 同一进程中的线程因属同一地址空间,...

u014590757
2018/04/16
0
0
总结——进程与线程的区别,进程/线程通信

进程和线程的区别 进程是操作系统资源分配的基本单位;线程是任务调度和执行的基本单位。 进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间;线程没有独立的地址空间(线...

osc_m201eczg
2019/09/05
11
0
进程间通信和线程间通信的几种方式

进程和线程的区别: 对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。 而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其...

harry_128
03/31
0
0
进程间通信和线程间通信

进程间的通信 管道(pipe) 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道 (namedpipe) 有名管道也是半...

nishishei
06/30
16
0
线程通信&进程通信

进程和线程的区别: 对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。 而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其...

ch3rry
03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

绕过移动端系统限制的 dlopen 库 byOpen

byOpen是一个绕过移动端系统限制的增强版dlfunctions库。 支持特性 Android 支持App中加载和使用Android系统库接口(即使maps中还没有被加载也支持)。 Android 7以上dlopen, System.load都是...

shzwork
昨天
21
0
Golang学习系列第二天:变量、常量、数据类型和流程语句

继golang第一天后,今天学习下golang的变量、常量、数据类型和控制流语句。 做过其他编程语言(比如JavaScript,java,python)项目的话,其实很好理解变量、常量、数据类型和控制流。 变量也...

董广明
昨天
30
0
redis系列之——一致性hash算法

一致性hash算法你了解吗?什么时候使用?解决什么问题?redis集群模式使用了一致性hash算法了吗? 数据分片(sharding) 分布式数据存储时,经常要考虑数据分片,避免将大量的数据放在单表或...

诸葛小猿
昨天
15
0
IMDB是否提供API? [关闭] - Does IMDB provide an API? [closed]

问题: I recently found a movie organizer application which fetches its data from the IMDB database . 最近,我发现了一个电影管理器应用程序,该应用程序从IMDB数据库中获取其数据。 ...

fyin1314
昨天
14
0
Elasticsearch系列之Query DSL

1 前言 我们先通过阅读官方文档,了解一下什么是 Query DSL 。 1.1 Query DSL Elasticsearch provides a full Query DSL (Domain Specific Language) based on JSON to define queries. DSL是......

冯文议
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部