缓冲区并发访问方法及装置的制造方法

文档序号:8905070阅读:157来源:国知局
缓冲区并发访问方法及装置的制造方法
【技术领域】
[0001]本发明涉及数据处理领域,特别涉及一种缓冲区并发访问方法及装置。
【背景技术】
[0002]支持并发访问的缓冲区一般以特定数据结构+全局锁来实现;其中,所谓并发访问为多个线程在不同的时刻均能够访问该缓冲区,而缓冲区在某个时刻仅仅允许一个线程访问;而所谓数据结构可以例如:同步队列,哈希表、同步链表等。
[0003]现有技术中,以同步队列为例,如果写线程被CPU唤醒而访问缓冲区时,需要调用相应的条件变量(即写条件变量)以获得全局锁,在写入数据之前首先在队尾新建一个内容为空的节点,而为了保证队列的有效性,其他节点也将被调整;而如果读线程被CPU唤醒而访问缓冲区时,需要调用相应的条件变量(即读条件变量)以获得全局锁,在读取队头的节点中的数据之后,会删除该节点,而为了保证队列的有效性,其他节点也将被调整。
[0004]可见,现有技术中写线程/读线程被CPU唤醒后访问缓冲区时均涉及到缓冲区的数据结构的改变,而改变缓冲区的数据结构会较为耗时,这无疑会导致缓冲区的访问效率较低。

【发明内容】

[0005]基于上述问题,本发明实施例公开了一种缓冲区并发访问方法及装置,以提高缓冲区的访问效率。技术方案如下:
[0006]第一方面,本发明实施例提供了一种缓冲区并发访问方法,应用于缓冲区并发访问架构中被CPU唤醒的写线程/读线程;所述缓冲区并发访问架构包括:N个线程访问组,其中,每个线程访问组对应各自的缓冲区子区域,并且,每个线程访问组均包括:一个读线程和一个写线程,所述读线程和所述写线程分别对应有各自的用于获得所述缓冲区的全局锁的条件变量;并且,所述N个线程访问组内的当前被唤醒的写线程/读线程之外的写线程所对应的条件变量和读线程所对应的条件变量均处于阻塞状态;所述方法包括:
[0007]调用被CPU解除阻塞的条件变量以获得所述缓冲区的全局锁;
[0008]对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作;
[0009]在访问操作执行完毕后,释放所调用的所述条件变量,以使得所述CPU在获知当前被唤醒的写线程/读线程释放所述条件变量后,能够解除执行下一次访问操作所需的写线程/读线程所对应的条件变量的阻塞。
[0010]可选的,当写线程被CPU唤醒时,所述对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作,包括:
[0011]对被CPU唤醒的写线程所对应的缓冲区子区域执行数据写入操作;
[0012]当读线程被CPU唤醒时,所述对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作,包括:
[0013]对被CPU唤醒的读线程所对应的缓冲区子区域执行数据读取操作。
[0014]可选的,所述对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作之前,还包括:
[0015]判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,如果是,对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作;
[0016]在访问操作执行完毕后,所述方法还包括:
[0017]将所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域设置为与访问操作对应的访问状态。
[0018]可选的,当写线程被CPU唤醒时:
[0019]所述判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,包括:
[0020]判断所述被CPU唤醒的写线程所对应的缓冲区子区域是否处于数据未写入状态;
[0021]所述将所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域设置为与访问操作对应的访问状态,包括:
[0022]将所述被CPU唤醒的写线程所对应的缓冲区子区域设置为数据已写入状态;
[0023]当读线程被CPU唤醒时:
[0024]所述判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,包括:
[0025]判断所述被CPU唤醒的读线程所对应的缓冲区子区域是否处于数据已写入状态;
[0026]所述将所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域设置为与访问操作对应的访问状态,包括:
[0027]将所述被CPU唤醒的读线程所对应的缓冲区子区域设置为数据未写入状态。
[0028]第二方面,本发明实施例还提供了一种缓冲区并发访问装置,应用于缓冲区并发访问架构中被唤醒的写线程/读线程;所述缓冲区并发访问架构包括:N个线程访问组,其中,每个线程访问组对应各自的缓冲区子区域,并且,每个线程访问组均包括:一个读线程和一个写线程,所述读线程和所述写线程分别对应有各自的用于获得所述缓冲区的全局锁的条件变量;并且,所述N个线程访问组内的当前被唤醒的写线程/读线程之外的写线程所对应的条件变量和读线程所对应的条件变量均处于阻塞状态;所述装置包括:
[0029]条件变量调用模块,用于调用被CPU解除阻塞的条件变量以获得所述缓冲区的全局锁;
[0030]访问操作执行模块,用于对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作;
[0031]条件变量释放模块,用于在访问操作执行完毕后,释放所调用的所述条件变量,以使得所述CPU在获知当前被唤醒的写线程/读线程释放所述条件变量后,能够解除执行下一次访问所需的写线程/读线程所对应的条件变量的阻塞。
[0032]可选的,所述访问操作执行模块,包括:
[0033]数据写入操作执行单元,用于当写线程被CPU唤醒时,对所述被CPU唤醒的写线程所对应的缓冲区子区域执行数据写入操作;
[0034]数据读取操作执行单元,用于当读线程被CPU唤醒时,对所述被CPU唤醒的读线程所对应的缓冲区子区域执行数据读取操作。
[0035]可选的,本发明实施例所提供的一种缓冲区并发访问装置还包括:
[0036]访问状态判断模块,用于在所述访问操作执行模块对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,如果是,触发所述访问操作执行模块;
[0037]访问状态设置模块,用于在访问操作执行完毕后,将所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域设置为与访问操作对应的访问状态。
[0038]可选的,所述访问状态判断模块,包括:
[0039]第一访问状态判断单元,用于当写线程被CPU唤醒时,在访问操作执行模块对所述被CPU唤醒的写线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的写线程所对应的缓冲区子区域是否处于数据未写入状态,如果是,触发所述访问操作执行丰吴块;
[0040]第二访问状态判断单元,用于当读线程被CPU唤醒时,在访问操作执行模块对所述被CPU唤醒的读线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的读线程所对应的缓冲区子区域是否处于数据已写入状态,如果是,触发所述访问操作执行模块;
[0041 ] 所述访问状态设置模块,包括:
[0042]第一访问状态设置单元,用于当写线程被CPU唤醒时,在访问操作执行完毕后,将所述被CPU唤醒的写线程所对应的缓冲区子区域设置为数据已写入状态;
[0043]第二访问状态设置单元,用于当读线程被CPU唤醒时,在访问操作执行完毕后,将所述被CPU唤醒的读线程所对应的缓冲区子区域设置为数据未写入状态。
[0044]本发明实施例中,缓冲区并发访问架构包括:N个线程访问组,其中,每个线程访问组对应各自的缓冲区子区域,并且,每个线程访问组均包括:一个读线程和一个写线程,读线程和写线程分别对应有各自的用于获得缓冲区子区域所在缓冲区的全局锁的条件变量;而当任意一线程访问组内的写线程/读线程被CPU唤醒后,调用被CPU解除阻塞的相应的条件变量以获得该缓冲区的全局锁;对该被唤醒的写线程/读线程所对应的缓冲区子区域执行相应的访问操作;在访问操作执行完毕后,释放所调用的相应的条件变量,以使得CPU在获知当前被唤醒的写线程/读线程释放相应的条件变量后,能够解除执行下一次访问操作所需的写线程/读线程所对应的条件变量的阻塞。可见,通过利用本方案,每个线程访
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1