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

文档序号:8905070阅读:来源:国知局
强调的是,为了保证多个线程对缓冲区的并发访问,N个线程访问组内的当前被唤醒的写线程/读线程之外的写线程所对应的条件变量和读线程所对应的条件变量均处于阻塞状态,以保证多个线程对缓存区的并发访问;相应的,N个线程访问组内的当前被唤醒的写线程/读线程之外的写线程和读线程均无法调用自身所对应的条件变量,因此,当前被唤醒的写线程/读线程之外的写线程和读线程均被阻塞。
[0078]S202,判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访冋状态;
[0079]由于预先已经为每个线程访问组分配各自的缓冲区子区域,因此,被唤醒的写线程/读线程可以判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,进而根据不同的判断结果执行不同的操作。具体的,在判断出所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域处于所需的访问状态时,可以执行S203;否则,释放该条件变量,从而使得该条件变量将被阻塞,此时,被唤醒的写线程/读线程无法继续执行,直到其对应的缓冲子区域的访问状态被更改。
[0080]具体的,如果写线程被CPU唤醒时,所述判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态可以包括:判断所述被CPU唤醒的写线程所对应的缓冲区子区域是否处于数据未写入状态;如果读线程被CPU唤醒时,判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态可以包括:判断所述被CPU唤醒的读线程所对应的缓冲区子区域是否处于数据已写入状态。
[0081]需要强调的是,当写线程被唤醒时,如果其对应的缓冲区子区域的访问状态为数据已写入状态,该写线程对应的条件变量被阻塞,该写线程无法继续执行,直到有读线程从该缓冲区子区域读取数据,并将该缓冲区子区域设置为数据未写入状态;同理,当读线程被唤醒后,如果其对应的缓冲区子区域的访问状态为数据未写入状态,该读线程对应的条件变量被阻塞,该读线程无法继续执行,直到有写线程从该缓冲区子区域写入数据,并将该缓冲区子区域设置为数据已写入状态。
[0082]可以理解的是,不同的访问状态可以通过不同的标识进行表征,当然并不局限与此。
[0083]S203,当判断出所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域处于所需的访问状态时,对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作;
[0084]由于预先已经为每个线程访问组分配各自的缓冲区子区域,因此,被唤醒的写线程/读线程当判断出所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域处于所需的访问状态时,可以直接对其自身所对应的缓冲区子区域执行访问操作。
[0085]需要说明的是,当写线程被CPU唤醒时,对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作,可以包括:
[0086]对所述被CPU唤醒的写线程所对应的缓冲区子区域执行数据写入操作;
[0087]当读线程被CPU唤醒时,对所述被CPU唤醒的写线程/读线程自身所对应的缓冲区子区域执行访问操作,可以包括:
[0088]对所述被CPU唤醒的读线程所对应的缓冲区子区域执行数据读取操作。
[0089]需要说明的是,关于线程访问组内的写线程对其自身对应的缓冲区子区域执行数据写入操作的具体实现过程可以与现有技术相同,在此不做赘述;同样的,关于线程访问组内的读线程对其自身所对应的缓冲区子区域执行数据读取操作的具体实现过程可以与现有技术相同,在此不做赘述。
[0090]S204,在访问操作执行完毕后,释放所调用的该条件变量,以使得CPU在获知当前被唤醒的写线程/读线程释放该条件变量后,能够解除执行下一次访问操作所需的写线程/读线程所对应的条件变量的阻塞。
[0091]具体的,如果写线程被CPU唤醒,该写线程对其所对应的缓冲区子区域执行数据写入操作后,可以释放所调用的该条件变量,即写条件变量;而如果读线程被CPU唤醒,该读线程对其所对应的缓冲区子区域执行数据读取操作后,可以释放所调用的该条件变量,即读条件变量。
[0092]并且,CPU在获知当前被唤醒的写线程/读线程释放该条件变量后,能够解除执行下一次访问操作所需的写线程/读线程所对应的条件变量的阻塞,而被解除阻塞的条件变量能够被执行下一次访问操作所需的写线程/读线程所调用。
[0093]需要强调的是,当执行下一次访问操作所需的写线程/读线程为本次被唤醒的线程且立即执行下一次访问操作时,本次所释放的相应的条件变量可以不被阻塞,从而使得本次所需的写线程/读线程仍处于唤醒状态;否则,本次所释放的该条件变量将被阻塞。
[0094]可见,通过利用本方案,每个线程访问组对应各自固有的缓冲区子区域,即线程对缓冲区的访问为基于位置的访问,而不再基于特定的数据结构,这样使得在访问缓冲区过程中,避免了缓冲区的数据结构的修改,因此,能够提高缓冲区访问效率。并且,当判断出所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域处于所需的访问状态时,才对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作,因此,通过利用本方案,能够进一步提高缓冲区的访问有效性。
[0095]相应于上述方法实施例,本发明实施例还提供了一种缓冲区并发访问装置,该缓冲区并发访问装置应用于缓冲区并发访问架构中被唤醒的写线程/读线程;所述缓冲区并发访问架构包括:N个线程访问组,其中,每个线程访问组对应各自的缓冲区子区域,并且,每个线程访问组均包括:一个读线程和一个写线程,所述读线程和所述写线程分别对应有各自的用于获得所述缓冲区的全局锁的条件变量;并且,所述N个线程访问组内的当前被唤醒的写线程/读线程之外的写线程所对应的条件变量和读线程所对应的条件变量均处于阻塞状态;如图4所示,所述装置可以包括:
[0096]条件变量调用模块410,用于调用被CPU解除阻塞的条件变量以获得所述缓冲区的全局锁;
[0097]访问操作执行模块420,用于对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作;
[0098]条件变量释放模块430,用于在访问操作执行完毕后,释放所调用的条件变量,以使得所述CPU在获知当前被唤醒的写线程/读线程释放所述条件变量后,能够解除执行下一次访问所需的写线程/读线程所对应的条件变量的阻塞。
[0099]可见,通过利用本方案,每个线程访问组对应各自固有的缓冲区子区域,即线程对缓冲区的访问为基于位置的访问,而不再基于特定的数据结构,这样使得在访问缓冲区过程中,避免了缓冲区的数据结构的修改,因此,能够提高缓冲区访问效率。
[0100]具体的,所述访问操作执行模块420,可以包括:
[0101]数据写入操作执行单元,用于当写线程被CPU唤醒时,对所述被CPU唤醒的写线程所对应的缓冲区子区域执行数据写入操作;
[0102]数据读取操作执行单元,用于当读线程被CPU唤醒时,对所述被CPU唤醒的读线程所对应的缓冲区子区域执行数据读取操作。
[0103]更进一步的,在上述的包括条件变量调用模块410、访问操作执行模块420和条件变量释放模块430的缓冲区并发访问装置的基础上,本发明另一实施例所提供的一种缓冲区并发访问装置还可以包括:
[0104]访问状态判断模块,用于在所述访问操作执行模块对所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域是否处于所需的访问状态,如果是,触发所述访问操作执行模块;
[0105]访问状态设置模块,用于在访问操作执行完毕后,将所述被CPU唤醒的写线程/读线程所对应的缓冲区子区域设置为与访问操作对应的访问状态。
[0106]具体的,所述访问状态判断模块,可以包括:
[0107]第一访问状态判断单元,用于当写线程被CPU唤醒时,在访问操作执行模块对所述被CPU唤醒的写线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的写线程所对应的缓冲区子区域是否处于数据未写入状态,如果是,触发所述访问操作执行丰吴块;
[0108]第二访问状态判断单元,用于当读线程被CPU唤醒时,在访问操作执行模块对所述被CPU唤醒的读线程所对应的缓冲区子区域执行访问操作之前,判断所述被CPU唤醒的读线程所对应的缓冲区子区域是否处于数据已写入状态,如果是,触发所述访问操作执行丰吴块;<
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1