CN100388214C - 一种多线程处理中的资源调用方法 - Google Patents

一种多线程处理中的资源调用方法 Download PDF

Info

Publication number
CN100388214C
CN100388214C CNB2005100975394A CN200510097539A CN100388214C CN 100388214 C CN100388214 C CN 100388214C CN B2005100975394 A CNB2005100975394 A CN B2005100975394A CN 200510097539 A CN200510097539 A CN 200510097539A CN 100388214 C CN100388214 C CN 100388214C
Authority
CN
China
Prior art keywords
thread
resource
message
message queue
multithreading
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2005100975394A
Other languages
English (en)
Other versions
CN1794185A (zh
Inventor
付黎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kingsoft Office Software Inc
Original Assignee
Beijing Kingsoft Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Kingsoft Software Co Ltd filed Critical Beijing Kingsoft Software Co Ltd
Priority to CNB2005100975394A priority Critical patent/CN100388214C/zh
Publication of CN1794185A publication Critical patent/CN1794185A/zh
Application granted granted Critical
Publication of CN100388214C publication Critical patent/CN100388214C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种多线程处理中的资源调用方法,包括:将线程对资源的操作放入预置线程;线程申请资源调用时生成消息,放入所述预置线程的消息队列;依据队列管理机制发送消息,触发线程对资源的操作;Windows系统提供应用程序接口Send Message用于发送消息。本发明采用消息队列的方式将多线程资源调用的操作改为单线程处理,避免了现有技术出现死锁的情况。与现有技术中针对每个资源建立锁相比,本发明减小了系统工作量,降低了系统负荷;并且,本发明很好的利用了视窗Windows系统中的消息队列以及消息触发机制,使得本发明的实现更加简单。

Description

一种多线程处理中的资源调用方法
技术领域
本发明涉及多线程处理机制,尤其是多线程处理中的资源调用方法。
背景技术
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行,负责在单个程序里执行多任务。每个程序均有一个主线程,根据需要,在主线程之外创建多个子线程来完成一些辅助任务。
所述多线程处理是为了使多个线程并行的工作以完成多项任务,以提高系统的效率。多线程应用程序将程序划分成独立的任务,对于当前没有进行处理的任务,将处理器时间让给其他任务,例如:线程A在使用输入输出设备读取某一个资源时,CPU处于空闲状态,此时,线程B可以利用CPU的空闲时间完成其他的任务。基于上述原因,多线程处理可以最大可能的利用所有资源,避免资源浪费。
由于多线程都作为独立的任务分别进行运行,当多个线程对同一个资源进行操作时,就会出现如下问题:在同一时间内,线程A要读取一个文件,并且线程B要对这个文件进行写操作,那么就会出现冲突,发生不可预知的错误。
为解决上述多线程处理中共享资源调用的问题,现有技术中提出了所谓加锁的方案。为了达到在一个时间段内只能有一个线程访问共享资源的目的,当某个资源被一个线程访问时,给这个资源加上一个锁,保证其他线程不能对这个资源进行处理,直到该线程处理完资源并解锁,其他线程才能对这个资源进行处理;并且,为了对每个共享资源的调用进行控制,需要为每个共享资源创建一个锁,如有100个资源则创建100个锁;在每个线程对某一个共享资源进行处理时,通过上述加锁/解锁的处理控制对该资源的调用。
由上述技术方案可以看出,现有技术将出现所谓死锁的情况,具体的:线程A要使用共享资源1和共享资源2完成一个操作,线程B也要使用共享资源1和共享资源2完成一个操作,并且,当前线程A拥有处理共享资源1的锁,申请获得共享资源2的锁,线程B拥有处理共享资源2的锁,申请获得共享资源1的锁,则此时线程A和线程B均等待对方释放调用的资源,使得线程A和线程B均无法完成操作,并一直等待下去。除此之外,为每个共享资源均创建一个锁并进行加锁/解锁的操作,将加大系统负荷,尤其当共享资源数量庞大时,系统的资源管理处理工作将非常繁琐。
发明内容
为了解决上述问题,本发明提供一种多线程处理中的资源调用方法,该方法可以避免资源调用的冲突。
为解决上述技术问题,本发明的目的是通过以下技术方案实现的。
一种多线程处理中的资源调用方法,包括:将线程对资源的操作放入预置线程;线程申请资源调用时生成消息,放入所述预置线程的消息队列;依据队列管理机制发送消息,触发线程对资源的操作;
Windows系统提供应用程序接口Send Message用于发送消息。
上述方法中,所述预置线程的消息队列对应确定的资源组,确定资源组中至少有两个资源会被同一线程调用。
上述方法中,所述消息队列为视窗Windows系统为应用程序创建的主线程的消息队列;或者为视窗Windows系统为应用程序创建的主线程之外某一线程的消息队列;或者为视窗Windows系统为应用程序创建的专用于处理子线程进行资源操作的线程的消息队列。
以上技术方案可以看出,本发明在多线程对资源调用的操作中采用了消息队列的管理机制,将线程调用资源的请求放进预置线程的消息队列;由于消息队列处理消息的顺序是先进先出,并且,如果当前消息队列中的一个消息正在被处理,则队列中其他资源调用的消息将在队列中等待,直到当前消息处理完成。由此可知,本发明采用消息队列的方式将多线程资源调用的操作改为单线程处理,避免了现有技术出现死锁的情况。与现有技术中针对每个资源建立锁相比,本发明减小了系统工作量,降低了系统负荷。
进一步,在视窗Windows操作系统中,本发明很好的利用了该系统中的消息队列以及消息触发机制,使得本发明的实现更加简单。
附图说明
图1为本发明所述方法流程图;
图2为本发明所述方法原理示意图。
具体实施方式
本发明提供了一种多线程处理中的资源调用机制,尤其用于解决现有技术中,多线程在对共享资源调用时易出现的死锁的问题。所述共享资源是指被多个线程处理的资源,包括:文件、共享内存、注册表等。
本发明的核心思想是:将线程对资源的操作放入预置线程;线程申请资源调用时生成消息,放入预置的线程的消息队列;依据队列管理机制发送消息,触发线程对资源的操作。
步骤11:将每个线程中对共享资源的操作放到预置线程中;本实施例所述预置线程为视窗Windows系统为应用程序创建的主线程的消息队列,或是视窗Windows系统为应用程序创建的主线程之外的某一个线程的消息队列,或是视窗Windows系统为应用程序创建的专用于处理子线程进行资源操作的线程的消息队列。
步骤12:线程申请资源调用时生成消息,放入预置的线程的消息队列,所述消息队列对应确定的资源组,确定资源组中至少有两个资源会被同一线程调用;
如上文所分析,如果线程需要调用多个资源才能完成操作,则在现有技术中,当多个线程对资源的调用存在交叉时,则易出现所述的死锁的情况。然而,本发明尤其适用于多个共享资源经常性被同时调用的情况,基于队列的管理机制,将多线程对资源的调用改为单线程操作,从而避免了上述情况的出现。
下面以视窗Windows系统为例,说明本步骤的实现方法。
Windows应用程序开始执行后,Windows为程序创建至少一个消息队列,一般情况下,为每个线程窗口都创建一个消息队列,用以存放当前线程窗口的消息。windows系统提供SendMessageAPI用以发送消息,其特性是必须等待当前消息处理完成后才返回;如果当前消息队列中的一个消息正在被处理,那么当其他线程利用Sendmessage发送消息时,消息会排列在消息队列中等待被处理的消息完成,才被处理;并且,消息队列处理消息的顺序是先进先出。
当子线程需要对共享资源进行操作时,调用windows消息机制中的SendMessage发送消息,消息内容是用于触发已在预置线程中的相应线程进行共享资源操作的代码;消息队列中的消息是被顺序处理的,且只有当一个消息被处理完成后,才能处理另外一个消息。保证了共享资源同时只能被一个线程所使用。
具体举例,以下代码是在线程中加入的用于发送消息的代码。其中,WM_CUSTOM可以设置为对应在预置线程中该线程处理共享资源的函数名称;hMainWindow为预置线程所对应的窗口句柄,函数VoidOtherThreadFunction()用于线程向预置线程发送消息,该消息通过Windows系统提供的SendMessage进行发送,请参以下代码。
    Void OtherThreadFunction()
    {……
        LRESULT1=SendMessage(hMainWindow,WM_CUSTOM,WPARAM,
LPARAM)
    }
    预置线程收到消息后,触发相应子线程对资源的操作。
    LRESULT OnMessage(WPARAMw,LPARAM1)
    {
    //原本在线程中处理的代码
    ……
}
步骤13:依据队列管理机制发送消息,触发线程对资源的操作;依据步骤12中的设置,以及队列管理机制,实现程序对资源的操作。
以上实施例中,说明了本发明在视窗系统环境下的实现方式,由于视窗系统自身的消息机制,使得本发明的实现更加简单,然而本发明并不限定本发明所应用的系统环境。
以下参照图2具体说明本发明实施原理。
如图所示,设当前应用程序共有子三个线程:线程A、线程B以及线程C,该三个线程都需要对共享资源1进行操作,并且,三个线程在主线程中用于处理共享资源1的函数分别为fun_A、fun_B、fun_C;在处理过程中,线程A、线程B、线程C当需要对共享资源1进行处理时,分别发送messageA、messageB以及messageC。
假设messageA、messageB以及messageC到达消息队列的顺序为:2、1、3,即messageB先到达队列,messageA第二个到达队列,messageC最后到达队列,则系统按照三个消息的到达顺序读取消息,并进行处理。具体的,首先处理消息B,触发主线程中的fun_B,当fun_B对共享资源1处理完成后,即消息队列中的消息B被处理完成后,读取并处理消息A;同理,消息A处理完成后,读取并处理消息C,最终完成三个线程对共享资源1的操作。
以上对本发明所提供的一种多线程处理中的资源调用方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (5)

1.一种多线程处理中的资源调用方法,其特征在于:
将线程对资源的操作放入预置线程;
线程申请资源调用时生成消息,放入所述预置线程的消息队列;
依据队列管理机制发送消息,触发线程对资源的操作;
Windows系统提供应用程序接口Send Message用于发送消息。
2.如权利要求1所述的多线程处理中的资源调用方法,其特征在于:
预置线程的消息队列对应确定的资源组,确定资源组中至少有两个资源会被同一线程调用。
3.如权利要求1所述的多线程处理中的资源调用方法,其特征在于:
所述消息队列为视窗Windows系统为应用程序创建的主线程的消息队列。
4.如权利要求1所述的多线程处理中的资源调用方法,其特征在于:
所述消息队列为视窗Windows系统为应用程序创建的主线程之外某一线程的消息队列。
5.如权利要求1所述的多线程处理中的资源调用方法,其特征在于:
所述消息队列为视窗Windows系统为应用程序创建的专用于处理子线程进行资源操作的线程的消息队列。
CNB2005100975394A 2005-12-30 2005-12-30 一种多线程处理中的资源调用方法 Active CN100388214C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100975394A CN100388214C (zh) 2005-12-30 2005-12-30 一种多线程处理中的资源调用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100975394A CN100388214C (zh) 2005-12-30 2005-12-30 一种多线程处理中的资源调用方法

Publications (2)

Publication Number Publication Date
CN1794185A CN1794185A (zh) 2006-06-28
CN100388214C true CN100388214C (zh) 2008-05-14

Family

ID=36805658

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100975394A Active CN100388214C (zh) 2005-12-30 2005-12-30 一种多线程处理中的资源调用方法

Country Status (1)

Country Link
CN (1) CN100388214C (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631665A (zh) * 2013-12-12 2014-03-12 北京奇虎科技有限公司 一种基于消息队列的线程间通信的方法和系统
CN103645942B (zh) * 2013-12-12 2017-02-01 北京奇安信科技有限公司 基于消息队列的共享内存写入及读取方法和系统

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102662752B (zh) * 2012-04-17 2014-04-16 山东神思电子技术股份有限公司 相机控制方法
CN104424123B (zh) * 2013-09-10 2018-03-06 中国石油化工股份有限公司 一种无锁数据缓冲区及其使用方法
CN104252538B (zh) * 2014-09-22 2018-10-12 可牛网络技术(北京)有限公司 网页处理方法和装置
CN105528257B (zh) * 2016-01-08 2021-01-05 腾讯科技(深圳)有限公司 一种单进程数据处理方法及装置
CN106201705B (zh) * 2016-07-25 2019-10-08 东软集团股份有限公司 处理消息的方法及装置
CN106708614B (zh) * 2016-11-21 2019-12-10 桂林远望智能通信科技有限公司 多线程创建系统及方法、多线程处理系统及方法
CN106959900B (zh) * 2017-03-22 2020-05-19 飞天诚信科技股份有限公司 一种防止多线程死锁的方法及装置
CN109240811B (zh) * 2018-08-09 2020-07-31 武汉斗鱼网络科技有限公司 一种任务执行方法和装置
CN109491794A (zh) * 2018-11-21 2019-03-19 联想(北京)有限公司 资源管理方法、装置及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050091656A1 (en) * 1997-03-14 2005-04-28 International Business Machines Corporation Stationary queue for scarce resource management
WO2005066779A1 (en) * 2003-12-31 2005-07-21 Intel Corporation Processing architecture having passive threads and active semaphores
US20050262507A1 (en) * 2004-05-20 2005-11-24 Bea Systems, Inc. System and method for application server with self-tuned threading model

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050091656A1 (en) * 1997-03-14 2005-04-28 International Business Machines Corporation Stationary queue for scarce resource management
WO2005066779A1 (en) * 2003-12-31 2005-07-21 Intel Corporation Processing architecture having passive threads and active semaphores
US20050262507A1 (en) * 2004-05-20 2005-11-24 Bea Systems, Inc. System and method for application server with self-tuned threading model

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631665A (zh) * 2013-12-12 2014-03-12 北京奇虎科技有限公司 一种基于消息队列的线程间通信的方法和系统
CN103645942B (zh) * 2013-12-12 2017-02-01 北京奇安信科技有限公司 基于消息队列的共享内存写入及读取方法和系统
CN103631665B (zh) * 2013-12-12 2017-11-07 北京奇安信科技有限公司 一种基于消息队列的线程间通信的方法和系统

Also Published As

Publication number Publication date
CN1794185A (zh) 2006-06-28

Similar Documents

Publication Publication Date Title
CN100388214C (zh) 一种多线程处理中的资源调用方法
JP3872690B2 (ja) キューイングされた作業アイテムを実施するための再利用可能スレッドのプールを提供するためのシステムおよび方法
EP2316091B1 (en) Protected mode scheduling of operations
US5675796A (en) Concurrency management component for use by a computer program during the transfer of a message
CN101258469B (zh) 信息处理设备
CN102455933B (zh) 一种通过线程管理提高多任务处理效率的方法
CN101452399B (zh) 任务二级调度模块及方法
CN101853182A (zh) 基于数据库的任务执行方法及装置
US6738846B1 (en) Cooperative processing of tasks in a multi-threaded computing system
US20090113440A1 (en) Multiple Queue Resource Manager
CN106293902A (zh) 一种处理器调度方法及系统
US20060112394A1 (en) Computer system
CN101414270A (zh) 硬件辅助的辅核任务动态优先级调度的实现方法
Coulson et al. Extending the Chorus micro-kernel to support continuous media applications
Jansen et al. Lightweight EDF scheduling with deadline inheritance
US20090064157A1 (en) Asynchronous data structure pull application programming interface (api) for stream systems
CN100383743C (zh) Java操作系统中实时任务调度方法
US11048562B2 (en) Multi-thread synchronization primitive
US7007004B2 (en) Concurrent operation of a state machine family
US20030163600A1 (en) Method and system where one thread can handle several different services concurrently
CN101349975B (zh) 一种在嵌入式操作系统上实现中断底半部机制的方法及装置
O'Ryan et al. Evaluating policies and mechanisms to support distributed real‐time applications with CORBA
CN100383742C (zh) Java操作系统中建立实时任务的实现方法
Bagchi et al. Application Controlled IPC Synchrony—An Event Driven Multithreaded Approach
Zhou et al. Limos: A lightweight multi-threading operating system dedicated to wireless sensor networks

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: BEIJING KINGSOFT OFFICE SOFTWARE CO., LTD.

Free format text: FORMER OWNER: BEIJING JINSHAN SOFTWARE CO., LTD.

Effective date: 20140313

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100083 HAIDIAN, BEIJING TO: 100085 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20140313

Address after: Kingsoft No. 33 building, 100085 Beijing city Haidian District Xiaoying Road

Patentee after: Beijing Kingsoft WPS Office Co., Ltd.

Address before: 100083 Bai Yan building, 238 middle Fourth Ring Road, Haidian District, Beijing

Patentee before: Beijing Jinshan Software Co., Ltd.

C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: Kingsoft No. 33 building, 100085 Beijing city Haidian District Xiaoying Road

Patentee after: Beijing Kingsoft office software Limited by Share Ltd

Address before: Kingsoft No. 33 building, 100085 Beijing city Haidian District Xiaoying Road

Patentee before: Beijing Kingsoft WPS Office Co., Ltd.