多线程技术实现并发控制在项目中的应用

多线程技术实现并发控制以及在项目中的应用

先介绍下原理 多线程技术vs线程同步

1多线程技术

多线程可以实现并行处理,避免了某项任务长时间占用CPU的时间。大部分计算机都是单CPU处理器,为了运行所有这些线程,操作系统以轮换方式为这些线程提供时间片,给人一种假象,看起来像是同时运行多个线程,进程内的线程共享同一虚拟地址,相关系统资源和全局变量。

但是如果两个非常活跃的线程抢占系统CPU时间,线程切换的时候就会消耗掉很多CPU资源,降低系统的性能。这一点在多线程编程时候要格外注意。

2 MFC 多线程及线程同步

一般很少有多个线程在生命周期内进行完全独立的操作,大多数是一些线程在处理一些操作的时候,另一些线程等待这些线程操作之后的操作结果进行分析和了解。
可是如果其他一些线程在线程未操作完成之前就访问了全局变量,就会不知道读取的全局变量的值是修改之前还是修改后的,所以为了保证其他线程能访问到线程处理完的结果采取的措施叫线程同步。

在MFC编程中,涉及到两种形式的线程,分别为用户界面线程以及工作者线程
前者主要是处理与界面相关的操作,并且实现消息与事件响应,后者主要是进行后台任务的处理,该处理操作与用户无关,两者可同时进行且互不干涉。

工作者线程

通常用一个函数代表一个线程来实现工作者线程
1 MFC通过UNIT MYControllingFunction()控制函数来实现工作者线程的创建。
2 再写一个与应用程序协同工作的函数 如 My Thread();
3 线程启动:通过函数AfxBeginThread()创建一个CWinThread类的对象。
然后对此对象进行初始化。
最后启动该线程。
返回该线程的地址。
此时线程进行运行状态。

临界区对象

当多个线程同一时间访问进程资源时,采用线程同步的方法。常见的同步对象有:临界区,信号量,互斥量,事件。通过这些对象实现线程的同步。

临界区对象的作用是保证某一时间范围内共享数据只允许一个线程访问。

使用过程中每个线程会提供一个可供共享的临界区对象,在程序中每一个线程都能够通过自身占有线程的方式来访问该对象。并且在这个线程访问过程中,其他线程一直等待下去直到临界区对象被释放。

MFC中一个CCriticalSection对象对应一个临界区资源,使用该对象控制的临界区资源前申请临界资源,然后调用该对象的Lock()成员函数,资源使用结束后调用该对象的Unlock()成员函数释放资源占有权。

多线程实现并发控制

进行各个监控区域进行检测时,我们采用多线程技术,可以在同一时间 针对大批量船舶数据进行实时监控。`

1 针对不同区域初始化线程个数。
2 初始化之后创建检测线程接收线程
3 创建检测线程数组。

创建监视区判断目标是否在区域内数组
监视区判断目标是否接近区域线程数组
会遇区检测线程数组。
锚泊区检测线程数组。
搁浅区检测线程数组。
报告线检测线程数组。
航道区检检测线程数组。

4 获取图层信息:线程创建完成之后,根据图层的类型调用LoadFigueInf()函数获取图层信息
5 接着分配图形线程,获取图形内的目标集合。同时向不同区域检测线程发送待检测数据,分配数据到线程,开启每个线程组检测函数。进行数据分配。
6 检测完成后,调用**SendAlarmMessage()**函数发送报警信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章