网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
标题 | 线程间通信及同步方法介绍 |
分类 | 软件教程 |
内容 | 线程间如何通信/同步?此前小编给大家介绍了进程间通信的方法,于是一些伙伴又好奇线程间的通信及同步方法,没关系,下面小编就继续给大家科普下线程间通信及同步的方法。 ![]() 线程间通信及同步方法介绍: 一、线程间的通信方式 1、使用全局变量 主要由于多个线程可能更改全局变量,因此全局变量最好声明为volatile。 2、使用消息实现通信 在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函数。 3、使用事件CEvent类实现线程间通信 Event对象有两种状态:有信号和无信号,线程可以监视处于有信号状态的事件,以便在适当的时候执行对事件的操作。 1)创建一个CEvent类的对象:CEvent threadStart;它默认处在未通信状态; 2)threadStart.SetEvent();使其处于通信状态; 3)调用WaitForSingleObject()来监视CEvent对象。 二、线程间的同步方式 各个线程可以访问进程中的公共变量,资源,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。 数据之间的相互制约包括: 1、直接制约关系,即一个线程的处理结果,为另一个线程的输入,因此线程之间直接制约着,这种关系可以称之为同步关系。 2、间接制约关系,即两个线程需要访问同一资源,该资源在同一时刻只能被一个线程访问,这种关系称之为线程间对资源的互斥访问,某种意义上说互斥是一种制约关系更小的同步。 线程间的同步方式有四种: 1、临界区 临界区对应着一个CcriticalSection对象,当线程需要访问保护数据时,调用EnterCriticalSection函数;当对保护数据的操作完成之后,调用LeaveCriticalSection函数释放对临界区对象的拥有权,以使另一个线程可以夺取临界区对象并访问受保护的数据。 PS:关键段对象会记录拥有该对象的线程句柄即其具有“线程所有权”概念,即进入代码段的线程在leave之前,可以重复进入关键代码区域。所以关键段可以用于线程间的互斥,但不可以用于同步(同步需要在一个线程进入,在另一个线程leave)。 2、互斥量 互斥与临界区很相似,但是使用时相对复杂一些(互斥量为内核对象),不仅可以在同一应用程序的线程间实现同步,还可以在不同的进程间实现同步,从而实现资源的安全共享。 PS: 1)互斥量由于也有线程所有权的概念,故也只能进行线程间的资源互斥访问,不能由于线程同步; 2)由于互斥量是内核对象,因此其可以进行进程间通信,同时还具有一个很好的特性,就是在进程间通信时完美的解决了“遗弃”问题。 3、信号量 信号量的用法和互斥的用法很相似,不同的是它可以同一时刻允许多个线程访问同一个资源,PV操作。 PS:事件可以完美解决线程间的同步问题,同时信号量也属于内核对象,可用于进程间的通信。 4、事件 事件分为手动置位事件和自动置位事件。事件Event内部它包含一个使用计数(所有内核对象都有),一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。由SetEvent()来触发,由ResetEvent()来设成未触发。 PS:事件是内核对象,可以解决线程间同步问题,因此也能解决互斥问题。 关于线程间的通信及同步方法就给大家讲解到这里了,更多关于线程同步的文章,大家可以参考:《线程同步的方法有哪些?Linux下实现线程同步的三种方法》 惠然之顾拼音:huì rán zhī gù释义:用作欢迎客人来临的客气话。同惠然肯来”。出处:晋·袁宏《后汉纪·灵帝纪下》弥秋历冬,经迈二载,深拒以疾,无惠然之顾。”示例:无 线程间通信及同步方法介绍守株待前三番五次呼后拥兔48.月亮的光芒是柔和的,她不似太阳那般耀眼夺目,热情四射,但她的宁静之美却深深地吸依着我。她总是在寂静的夜晚默默地为大地添上一抹光亮,让在外的人们能够看清回家的路,她也总会给人们的心头添上一抹温馨之感。43. I have fully realized that English is essential to my future.390.长亭外,古道边,芳草碧连天。晚风拂柳笛声残,夕阳山外山。 天之涯,地之角,知交半零落。一觚浊酒尽余欢,今宵别梦寒。李叔同《 送别》 欢极蓬壶蕖浸,花院梨溶,醉连春夕。柯云罢弈,樱桃在,梦难觅。劝清光、乍可幽窗相照,休照红楼夜笛。怕人间、换谱伊凉,素娥未识。日出雾露馀,青松如膏沐。线程间通信,线程间通信方式,线程间通信三种方式13.All that glitters is not gold. 闪光的未必都是金子。 |
随便看 |
|
霍普软件下载网教程攻略栏目提供软件使用教程、手机游戏攻略等方法技巧。