一种资源共享的方法及系统

阅读: 评论:0

著录项
  • CN201010182624.1
  • 20100524
  • CN102262559A
  • 20111130
  • 腾讯科技(深圳)有限公司
  • 禹荣凌
  • G06F9/46(2006.01)I
  • G06F9/46(2006.01)I G06F9/50(2006.01)I

  • 广东省深圳市福田区振兴路赛格科技园2栋东403室
  • 中国,CN,广东(44)
  • 深圳中一专利商标事务所
  • 贾振勇
摘要
本发明适用于计算机应用领域,提供了一种资源共享的方法和系统,所述方法包括下述步骤:设置资源与文件中的字节之间的对应关系;当进程访问资源时,针对文件中与该资源对应的字节申请文件锁,并在文件锁申请成功后,进程按照申请的文件锁访问资源;当进程释放资源时,解除进程针对文件中该资源对应的字节申请的文件锁。本发明实施例通过文件锁实现资源的互斥共享,由于对文件中与该资源对应的字节申请文件锁,即对文件中对应的偏移量申请文件锁,锁住的是文件的偏移量,而与文件的实际内容无关,因此,对文件的大小没有要求,从而可以实现大量资源的跨进程互斥访问。
权利要求

1.一种资源共享的方法,其特征在于,所述方法包括下述步骤:

设置资源与文件中的字节之间的对应关系;

当进程访问资源时,针对文件中与该资源对应的字节申请文件锁,并在文 件锁申请成功后,进程按照申请的文件锁访问资源;

当进程释放资源时,解除进程针对文件中该资源对应的字节申请的文件锁。

2.如权利要求1所述的方法,其特征在于,在所述针对文件中与该资源对 应的字节申请文件锁的步骤之后,所述方法还包括下述步骤:

判断文件锁申请是否成功,如果是,进程按照申请的文件锁访问资源,并 在访问完毕后,释放资源,解除针对文件中该资源对应的字节的文件锁,如果 否,进程持续等待,直到其他进程释放该资源,或者进程直接返回不等待。

3.如权利要求2所述的方法,其特征在于,所述判断文件锁申请是否成功 的步骤具体为:

判断文件中与该资源对应的字节是否已经被申请了文件锁,如果否,判定 文件锁申请成功,如果是,继续执行以下步骤;

判断文件中与该资源对应的字节的文件锁是互斥锁还是共享锁,如果是互 斥锁,判定文件锁申请不成功,如果是共享锁,继续执行以下步骤;

判断进程针对文件中与该资源对应的字节申请的文件锁是否为共享锁,如 果是,判定文件锁申请成功,否则判定文件锁申请不成功。

4.如权利要求1至3任一权利要求所述的方法,其特征在于,在所述当进 程释放资源时,解除进程针对文件中该资源对应的字节申请的文件锁的步骤之 后,所述方法还包括下述步骤:

唤醒等待该资源的其他进程,唤醒的进程针对文件中该资源对应的字节申 请文件锁。

5.一种资源共享系统,其特征在于,所述系统包括:

对应关系存储单元,用于存储设置的资源与文件中的字节之间的对应关系;

文件锁申请单元,用于在进程访问资源时,针对文件中与该资源对应的字 节申请文件锁;

资源访问单元,用于在所述文件锁申请单元的文件锁申请成功后,使进程 按照申请的文件锁访问资源;

文件锁解除单元,用于在进程释放资源时,解除进程针对文件中该资源对 应的字节申请的文件锁。

6.如权利要求5所述的系统,其特征在于,所述系统还包括:

文件锁申请判断单元,用于判断所述文件锁申请单元中文件锁申请是否成 功;

进程等待单元,用于在所述文件锁申请判断单元判定文件锁申请不成功时, 使进程持续等待,直到其他进程释放该资源,或者使进程不等待直接返回。

7.如权利要求6所述的系统,其特征在于,所述文件锁申请判断单元包括:

已申请判断模块,用于并在判定文件中与该资源对应的字节未被申请文件 锁时,判定文件锁申请成功;

文件锁类型判断模块,用于在所述已申请判断模块判定文件中与该资源对 应的字节已被申请文件锁时,判断文件中与该资源对应的字节的文件锁是互斥 锁还是共享锁,如果是互斥锁,判定文件锁申请不成功;

判定文件锁申请成功,用于在所述文件锁类型判断模块判定文件中与该资 源对应的字节的文件锁是共享锁时,判断进程针对文件中与该资源对应的字节 申请的文件锁是否为共享锁,如果是,判定文件锁申请成功,否则判定文件锁 申请不成功。

8.如权利要求5至7任一权利要求所述的系统,其特征在于,所述系统还 包括:

进程唤醒单元,用于在所述文件锁解除单元释放资源并解除进程针对文件 中该资源对应的字节申请的文件锁后,唤醒等待该资源的其他进程,唤醒的进 程针对文件中该资源对应的字节申请文件锁。

说明书
技术领域

本发明属于计算机应用领域,尤其涉及一种资源共享的方法及系统。

当多个进程或线程并发访问同一个资源时,为了保证资源的一致性,必须 遵守互斥规则。在具体实现时,互斥规则主要包括共享锁(也称为读锁)和互 斥锁(也称为写锁)两种。其中共享锁是指多个进程或线程可以同时访问资源, 但不能修改资源。即当某个进程或线程在访问资源,不是修改资源时,对该资 源增加共享锁,则其他进程或线程可以访问该资源,但不可以修改该资源。其 中互斥锁是指多个进程或线程不可以同时访问资源。即当某个进程或线程访问 资源(一般是修改资源)时,其他进程或线程此时都不能在访问(包括读取和 修改)该资源。因此,需要一种技术来按照互斥规则实现资源共享。

现有技术提供了一种通过信号量的方式来按照互斥规则实现资源共享的方 法,简述如下:声明一个semaphore对应一个资源,目前主流的semaphore有 两种,一种是SYSV的semaphore,使用semop申请或释放锁,一种是POSIX 的semaphore,使用sem_wait申请锁,使用sem_post释放锁,SYSV的semaphore 个数是有限制的,POSIX的semaphore则需要显示的占用用户空间的内存。这 种方法因为semaphore个数有限或者semaphore需要显示的占用用户空间的内 存,从而导致系统中可以使用的信号量的数目容易达到上限,当需要同时互斥 的资源较多时,将出现信号量不够用而无法按照互斥规则实现资源共享。

现有技术还提供了一种本地POSIX线程库(Native POSIX Thread Library, NPTL)互斥锁。但NPTL互斥锁是适用于单进程内的多线程互斥的,无法跨越 进程,实现多进程互斥。

本发明实施例的目的在于提供一种资源共享的方法,旨在解决通过文件锁 实现大量资源的跨进程互斥访问的问题。

本发明实施例是这样实现的,一种资源共享的方法,所述方法包括下述步 骤:

设置资源与文件中的字节之间的对应关系;

当进程访问资源时,针对文件中与该资源对应的字节申请文件锁,并在文 件锁申请成功后,进程按照申请的文件锁访问资源;

当进程释放资源时,解除进程针对文件中该资源对应的字节申请的文件锁。

本发明实施例的另一目的在于提供一种资源共享系统,所述系统包括:

对应关系存储单元,用于存储设置的资源与文件中的字节之间的对应关系;

文件锁申请单元,用于在进程访问资源时,针对文件中与该资源对应的字 节申请文件锁;

资源访问单元,用于在所述文件锁申请单元的文件锁申请成功后,使进程 按照申请的文件锁访问资源;

文件锁解除单元,用于在进程释放资源时,解除进程针对文件中该资源对 应的字节申请的文件锁。

在本发明实施例中,通过文件锁实现资源的互斥共享,由于对文件中与该 资源对应的字节申请文件锁,即对文件中对应的偏移量申请文件锁,锁住的是 文件的偏移量,而与文件的实际内容无关,因此,对文件的大小没有要求,从 而可以实现大量资源的跨进程互斥访问。

图1是本发明第一实施例提供的资源共享的方法的实现流程图;

图2是本发明第二实施例提供的资源共享的方法的实现流程图;

图3是本发明第三实施例提供的资源共享的方法的实现流程图;

图4是本发明实施例提供的资源共享的示例图;

图5是本发明第四实施例提供的资源共享系统的结构框图;

图6是本发明第五、六实施例提供的资源共享系统的结构框图。

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅 仅用以解释本发明,并不用于限定本发明。

在本发明实施例中,预先设置资源与文件中的字节之间的对应关系,当进 程访问资源时,针对文件中与该资源对应的字节申请文件锁,并在文件锁申请 成功后,访问该资源,当进程释放该资源时,解除针对文件中与该资源对应的 字节的文件锁,由于文件锁只是锁住文件的偏移量,从而文件的大小可以为任 意大小,从而可以实现大量资源的跨进程互斥访问。

实施例一:

图1示出了本发明第一实施例提供的资源共享的方法的实现流程,详述如 下:

在步骤S101中,设置资源与文件中的字节之间的对应关系。

其中文件是指用于实现文件锁的文件。在本发明实施例中,可以采用资源 文件映射表存储设置的资源与文件中的字节之间的对应关系,当然还可以采用 其他方式存储设置的资源与文件中的字节之间的对应关系,在此不一一举例说 明。表1.1示出了本发明实施例提供的资源文件映射表的其中一个示例,但不 以该示例为限,其中资源编号用于唯一标识资源,即根据资源编号即可获得对 应的资源,字节编号是指该字节在文件中的字节偏移量:

表1.1

资源编号 字节编号

资源编号1 第一字节

资源编号2 第二字节

资源编号3 第三字节

在表1.1中,资源编号为1的资源与文件中的第一字节对应,资源编号为2 的资源与文件中的第二字节对应,资源编号为3的资源与文件中的第三字节对 应。在本发明实施例中,由于将资源与用于实现文件锁的文件的偏移量进行对 应,从而用于实现文件锁的文件不占用用户空间的内存,仅占用内核空间的内 存,因此,文件的大小不受限制,即可以为0,即文件的物理内存可以为0。但 是用于表示文件偏移量的数值还是有一个容量上限的,如对于32位系统,可以 表示的文偏移量为232,这样,在32位系统中,可以实现232个资源的互斥共享; 如对于64位系统,可以表示的文偏移量为264,这样,在64位系统中,可以实 现264个资源的互斥共享。

在步骤S102中,当进程访问资源时,针对文件中与该资源对应的字节申请 文件锁,并在文件锁申请成功后,进程按照申请的文件锁访问资源。

其中文件锁为互斥锁或者共享锁。在本发明实施例中,需要根据进程对资 源的访问类型确定进程申请的是互斥锁还是共享锁。其中进程对资源的访问类 型包括但不限于独占型和共享型。其中独占型是指进程需要独占该资源,如进 程需要修改该资源等。共享型是指进程可以与其他进程或者线程共享该资源, 如进程仅读取该资源等。当进程对资源的访问类型为独占型时,针对文件中与 该资源对应的字节申请互斥锁;当进程对资源的访问类型为共享型时,针对文 件中与该资源对应的字节申请共享锁。

在本发明实施例中,使用文件系统标准接口中的锁功能实现对文件中该资 源对应的字节的文件锁。具体可以使用文件系统提供的fcntl函数来实现对文件 中该资源对应的字节的文件锁,其具体实现过程属于现有技术,在此不再赘述。

在步骤S103中,当进程释放资源时,解除进程针对文件中该资源对应的字 节申请的文件锁。

在本发明实施例中,当进程访问资源结束,释放该资源时,解除进程针对 文件中与该资源对应的字节申请的文件锁。具体实现时,可以调用文件系统标 准接口中的解锁接口对文件中与该资源对应的字节进行解锁处理,解除针对文 件中与该资源对应的字节申请的文件锁,以使其他进程或者线程可以针对文件 中与该资源对应的字节申请文件锁。

在本发明实施例中,通过文件锁实现资源的互斥共享,由于对文件中与该 资源对应的字节申请文件锁,即对文件中对应的偏移量申请文件锁,锁住的是 文件的偏移量,而与文件的实际内容无关,因此,对文件的大小没有要求,所 以资源的个数可以非常多,最多可以达到系统中文件偏移量的数据类型(off_t) 所能表示的最大值。在32Bit系统中,则该off_t的最大值为32Bit的整数,在 64Bit系统中,off_t的最大值为64Bit的整数,因此,在32位系统中,最大可 以实现232个资源的互斥共享,在64位系统中,可以实现264个资源的互斥共 享。

实施例二:

图2示出了本发明第二实施例提供的资源共享的方法的实现流程,详述如 下:

在步骤S201中,设置资源与文件中的字节之间的对应关系。其具体步骤如 上所述,在此不再赘述。

在步骤S202中,当进程访问资源时,针对文件中与该资源对应的字节申请 文件锁。其具体步骤如上所述,在此不再赘述。

在步骤S203中,判断文件锁申请是否成功,如果是,执行步骤S205,否 则执行步骤S204。

其中判断文件锁申请是否成功的步骤具体如下:

A、判断文件中与该资源对应的字节是否已经被申请了文件锁,如果是, 执行步骤B,否则判定文件锁申请成功;

在本发明实施例中,当进程访问某资源,针对文件中与该资源对应的字节 申请文件锁时,如果之前已经有其他进程或者线程正在访问该资源,则文件中 与该资源对应的字节已经被申请了文件锁;如果之前没有其他进程或者线程正 在访问该资源,则文件中与该资源对应的字节未被申请文件锁。

B、判断文件中与该资源对应的字节的文件锁是互斥锁还是共享锁,如果 是互斥锁,判定文件锁申请不成功,如果是共享锁,执行步骤C;

在本发明实施例中,当文件中与该资源对应的字节的文件锁为互斥锁时, 则其他进程或者线程不能再访问该资源,从而针对文件中与该资源对应的字节 申请文件锁将申请失败。当文件中与该资源对应的字节的文件锁为共享锁时, 则其他进程或者线程还可以访问(主要是读取)该资源,可以针对文件中与该 资源对应的字节申请共享锁。

C、判断进程针对文件中与该资源对应的字节申请的文件锁是否为共享锁, 如果是,判定文件锁申请成功,否则判定文件锁申请不成功。

在本发明实施例中,当进程针对文件中与该资源对应的字节申请的文件锁 是共享锁时,则由于文件中与该资源对应的字节的文件锁也为共享锁,因此, 文件锁申请成功。当进程针对文件中与该资源对应的字节申请的文件锁是互斥 锁时,则由于文件中与该资源对应的字节已经被申请了共享锁,因此,文件锁 申请不成功。

在步骤S204中,进程持续等待,直到其他进程释放该资源,或者进程直接 返回不等待。

在本发明实施例中,当进程申请文件锁不成功时,可以持续等待,直到其 他进程或者线程释放该资源,解除文件中与该资源对应的字节的文件锁。

在步骤S205中,进程按照申请的文件锁访问资源,并在访问完毕后,释放 资源,解除针对文件中该资源对应的字节的文件锁。

在本发明实施例中,当进程针对文件中与该资源对应的字节申请的文件锁 为互斥锁时,则进程采用独占方式访问资源,即可以对该资源进行读取或者修 改。当进程针对文件中与该资源对应的字节申请的文件锁为共享锁时,则进程 采用共享方式访问资源,即进程只能对该资源进行读取,不能对该资源进行修 改。

在本发明实施例中,在进程访问资源,针对文件中与该资源对应的字节申 请文件锁时,先判断文件锁是否申请成功,如果成功,则访问资源,并在访问 完毕后,释放资源,解除针对文件中与该资源对应的字节的文件锁,如果不成 功,则进程持续等待该资源被释放,或者不等待,直接返回,这样使资源共享 更合理、严谨。

实施例三:

图3示出了本发明第三实施例提供的资源共享的方法的实现流程,图3所 示的方法中的步骤S301至S305与图2所示的步骤S201至S205相同,其不同 之处,仅在于还包括下述步骤:

在步骤S306中,在进程释放资源,解除针对文件中与该资源对应的字节的 文件锁后,唤醒等待该资源的其他进程,唤醒的进程针对文件中该资源对应的 字节申请文件锁。当唤醒的进程有多个,即多个进程同时针对文件中该资源对 应的字节申请文件锁时,各进程进行竞争,获胜者对文件中该资源对应的字节 的文件锁申请成功。

在本发明实施例中,在进程访问完资源,释放资源时,解除针对文件中与 该资源对应的字节的文件锁,同时唤醒等待该资源被释放的其他进程。唤醒的 进程均针对文件中该资源对应的字节申请文件锁,文件锁申请成功的进程访问 该资源,文件锁申请不成功的进程继续等待,或者不再等待,直接返回。

为了便于理解,以下以一个具体的示例对本发明进行示例性说明,但不以 该示例为限:

请参阅图4,为本发明实施例提供的资源共享的示例图。假设资源S1与文 件中的第0字节对应,资源S2与文件中的第1字节对应,依次类推,资源Sn 与文件中的第x字节对应。进程P1同时锁住了文件的第0、1字节,且进程P1 对第0字节施加了共享锁,对第1字节施加了互斥锁。

由于进程P1对第0字节施加了共享锁,也就是说进程P1可以以共享方式 访问资源S1,由于进程P1第1字节施加了互斥锁,也就是说进程P1要以独占 方式访问资源S2,此时,如果进程P1需要访问资源S1,针对文件中的第0字 节申请文件锁时,只能申请共享锁。如果进程P1需要访问资源S2,针对文件 中的第1字节申请文件锁时,将申请不成功,从而进程P2等待资源S2被释放。

在图4所示的示例中,假设虚线箭头表示进程对文件中的字节加锁不成功, 实线箭头表示进程对文件中的字节加锁成功,则可以得到进程P1同时锁住了第 0、1字节,即同时占据了资源S1、S2。由于没有竞争,所以无法确定进程P1 对资源S 1是施加了共享锁还是互斥锁,也就是说,进程P1对资源S1可能施 加了共享锁,也可能施加了互斥锁。由于进程P1和P2同时竞争资源S2,且进 程P2加锁不成功,因此进程P1对资源S2施加了互斥锁,此时其他进程不能 对资源S2申请任何锁。进程P2试图锁住文件中的第1字节,但未加锁成功, 且正在等待资源S1被释放。由于进程P2、Pm同时锁住了文件中的第x字节, 则进程P2、Pm使用的必然是共享锁,进程P2、Pm同时占据了资源Sn,此时 其他进程不能修改资源Sn,但可以读取资源Sn,即其他进程可以申请对资源 Sn的共享锁,不能申请对资源Sn的互斥锁。

实施例四:

图5示出了本发明第四实施例提供的资源共享系统的结构,为了便于说明, 仅示出了与本发明实施例相关的部分。

该系统可以用于任何需要资源共享的设备,例如计算机、移动终端等,可 以是运行于这些设备内的软件单元、硬件单元或者软硬件相结合的单元,也可 以作为独立的挂件集成到这些需要资源共享的设备中或者运行于这些需要资源 共享的设备的应用系统中,其中:

对应关系存储单元1存储设置的资源与文件中的字节之间的对应关系。

其中文件是指用于实现文件锁的文件。设置资源与文件中的字节之间的对 应关系时,即是设置资源与文件的偏移量之间的对应的关系。在本发明实施例 中,可以采用资源文件映射表存储设置的资源与文件中的字节之间的对应关系, 当然还可以采用其他方式存储设置的资源与文件中的字节之间的对应关系,在 此不一一举例说明。

文件锁申请单元2在进程访问资源时,针对文件中与该资源对应的字节申 请文件锁。

其中文件锁为互斥锁或者共享锁。在本发明实施例中,需要根据进程对资 源的访问类型确定进程申请的是互斥锁还是共享锁。其中进程对资源的访问类 型包括但不限于独占型和共享型。其中独占型是指进程需要独占该资源,如进 程需要修改该资源等。共享型是指进程可以与其他进程或者线程共享该资源, 如进程仅读取该资源等。当进程对资源的访问类型为独占型时,针对文件中与 该资源对应的字节申请互斥锁;当进程对资源的访问类型为共享型时,针对文 件中与该资源对应的字节申请共享锁。

资源访问单元3在文件锁申请单元2的文件锁申请成功后,使进程按照申 请的文件锁访问资源。

文件锁解除单元4在进程释放资源时,解除进程针对文件中该资源对应的 字节申请的文件锁。

在本发明实施例中,当进程访问资源结束,释放该资源时,解除进程针对 文件中与该资源对应的字节申请的文件锁。具体实现时,可以调用文件系统标 准接口中的解锁接口对文件中与该资源对应的字节进行解锁处理,解除针对文 件中与该资源对应的字节申请的文件锁。

实施例五:

图6示出了本发明第五实施例提供的资源共享系统的结构,为了便于说明, 仅示出了与本发明实施例相关的部分。图6所示的资源共享系统在图5所示的 资源共享系统的基础上增加了以下部件:

文件锁申请判断单元5判断文件锁申请单元2中文件锁申请是否成功。该 文件锁申请判断单元5包括已申请判断模块51、文件锁类型判断模块52和文 件锁申请判断模块53。其中:

已申请判断模块51判断文件中与该资源对应的字节是否已经被申请了文 件锁,并在判定文件中与该资源对应的字节未被申请文件锁时,判定文件锁申 请成功。

文件锁类型判断模块52在已申请判断模块51判定文件中与该资源对应的 字节已被申请文件锁时,判断文件中与该资源对应的字节的文件锁是互斥锁还 是共享锁,如果是互斥锁,判定文件锁申请不成功。

文件锁申请判断模块53在文件锁类型判断模块52判定文件中与该资源对 应的字节的文件锁是共享锁时,判断进程针对文件中与该资源对应的字节申请 的文件锁是否为共享锁,如果是,判定文件锁申请成功,否则判定文件锁申请 不成功。

进程等待单元6在文件锁申请判断单元5判定文件锁申请不成功时,使进 程持续等待,直到其他进程释放该资源,或者使进程不等待直接返回。

实施例六:

在本发明另一实施例中,该系统还包括进程唤醒单元7。该进程唤醒单元7 在文件锁解除单元4释放资源并解除进程针对文件中该资源对应的字节申请的 文件锁后,唤醒等待该资源的其他进程。唤醒的进程通过文件锁申请单元2针 对文件中该资源对应的字节申请文件锁。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤 是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机 可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等,该程序 用来执行如下步骤:

在本发明实施例中,通过文件锁实现资源的互斥共享,由于对文件中与该 资源对应的字节申请文件锁,即对文件中对应的偏移量申请文件锁,锁住的是 文件的偏移量,而与文件的实际内容无关,因此,对文件的大小没有要求,所 以资源的个数可以非常多,最多可以达到系统off_t的最大值,如在32位系统 中,最大可以实现232个资源的互斥共享,在64位系统中,可以实现264个资 源的互斥共享。通过在申请文件锁之前。判断与该资源对应的字节是否已被申 请文件锁,如果已被申请文件锁,则进一步判断文件锁是互斥锁还是共享锁, 以判断文件锁申请是否成功,这样使资源共享更合理、严谨。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发 明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明 的保护范围之内。

本文发布于:2023-04-13 13:34:33,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/86042.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图