1.一种避免线程阻塞的方法,其特征在于,所述方法包括:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;
对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;
控制各生产者线程利用相应的所述TLS公共变量进行写数据;
控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据;其中,所述控制各生产者线程利用相应的所述TLS公共变量进行写数据,包括:获取成员变量的数据类型标识;
将所述数据类型标识分别与两个所述存储器的存储标识进行比较,确定第一目标存储器;所述第一目标存储器为存储标识与数据类型标识一致的存储器;
利用写数据函数将待写数据写入所述第一目标存储器中;
所述控制消费者线程利用所述消费者变量列表中所述TLS公共变量进行读取数据,包括:对所述成员变量进行加锁,将所述成员变量的数据类型标识进行翻转;
根据翻转后的成员变量的数据类型标识确定第二目标存储器,所述第二目标存储器为存储标识与翻转后的数据类型标识一致的存储器;
利用取数据函数从所述第二目标存储器中读取数据;其中,所述第二目标存储器与第一目标存储器不同。
2.如权利要求1所述的方法,其特征在于,所述公共变量类中还包括:成员变量及加锁临界变量。
3.如权利要求1所述的方法,其特征在于,所述为各生产者线程建立相应的公共变量类,包括:创建所述公共变量类的写数据函数;
创建所述公共变量类的取数据函数。
4.如权利要求1所述的方法,其特征在于,所述对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,包括:利用第一修饰函数ThreadStatic及第二修饰函数static依次对所述公共变量类进行修饰,获取修饰实例;
将所述修饰实例赋值至TLS变量,形成所述TLS公共变量。
5.如权利要求1所述的方法,其特征在于,所述利用写数据函数将所述待写数据写入所述第一目标存储器中时,利用加锁临界变量对写数据过程进行加锁操作。
6.一种避免线程阻塞的装置,其特征在于,所述装置包括:建立单元,用于为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;
获取单元,用于对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;
第一控制单元,用于控制各生产者线程利用相应的所述TLS公共变量进行写数据;
第二控制单元,用于控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据;其中,所述第一控制单元具体用于:获取成员变量的数据类型标识;
将所述数据类型标识分别与两个所述存储器的存储标识进行比较,确定第一目标存储器;所述第一目标存储器为存储标识与数据类型标识一致的存储器;
利用写数据函数将待写数据写入所述第一目标存储器中;
所述第二控制单元具体用于:
对所述成员变量进行加锁,将所述成员变量的数据类型标识进行翻转;
根据翻转后的成员变量的数据类型标识确定第二目标存储器,所述第二目标存储器为存储标识与翻转后的数据类型标识一致的存储器;
利用取数据函数从所述第二目标存储器中读取数据;其中,所述第二目标存储器与第一目标存储器不同。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现以下步骤:为各生产者线程建立相应的公共变量类,所述公共变量类中包含两个存储器;
对所述公共变量类进行实例化,获取线程本地存储TLS公共变量,并将所述TLS公共变量存储至预先建立的消费者变量列表中;
控制各生产者线程利用相应的所述TLS公共变量进行写数据;
控制消费者线程利用所述消费者变量列表中的所述TLS公共变量进行读取数据;其中,所述控制各生产者线程利用相应的所述TLS公共变量进行写数据,包括:获取成员变量的数据类型标识;
将所述数据类型标识分别与两个所述存储器的存储标识进行比较,确定第一目标存储器;所述第一目标存储器为存储标识与数据类型标识一致的存储器;
利用写数据函数将待写数据写入所述第一目标存储器中;
所述控制消费者线程利用所述消费者变量列表中所述TLS公共变量进行读取数据,包括:对所述成员变量进行加锁,将所述成员变量的数据类型标识进行翻转;
根据翻转后的成员变量的数据类型标识确定第二目标存储器,所述第二目标存储器为存储标识与翻转后的数据类型标识一致的存储器;
利用取数据函数从所述第二目标存储器中读取数据;其中,所述第二目标存储器与第一目标存储器不同。
8.一种避免线程阻塞的计算机设备,其特征在于,包括:至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中,所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至5任一所述的方法。