发明名称 |
一种多线程数据传输方法 |
摘要 |
本发明提供了一种多线程数据传输方法,定义两个整数值:writePos和readPos;其中,writePos表示数据写入线程当前正要写入所述数组空间的位置;readPos表示数据读取线程当前正要从所述数组空间读取数据的位置;数据写入成功,则writePos值自增;数据读取成功,则readPos值自增;定义一个整数掩码PosMask,其值为N‑1;通过PosMask的值与读写位置的值做与运算,来决定当前正要写入和读取的真正的数组空间的位置,即当前写入的位置应该是dataPtrArray[writePos&PosMask],读取的位置是dataPtrArray[readPos&PosMask]。能够解决两线程之间数据传输,即对队列容器这个临界资源实现无锁化的访问,极大提高性能。 |
申请公布号 |
CN106354572A |
申请公布日期 |
2017.01.25 |
申请号 |
CN201610761793.8 |
申请日期 |
2016.08.31 |
申请人 |
成都科来软件有限公司 |
发明人 |
罗鹰;黄江;林康 |
分类号 |
G06F9/54(2006.01)I |
主分类号 |
G06F9/54(2006.01)I |
代理机构 |
成都九鼎天元知识产权代理有限公司 51214 |
代理人 |
郭彩红 |
主权项 |
一种多线程数据传输方法,具体方法为:初始化系统时,申请一个能够容纳N个指针的连续内存空间;所述N=2<sup>m</sup>,m为大于等于1的整数;每个指针位置为一个单位,N个指针位置组成一个数组空间dataPtrArray;所述指针指向用户数据地址;定义两个整数值:writePos和readPos;其中,writePos表示数据写入线程当前正要写入所述数组空间的位置;readPos表示数据读取线程当前正要从所述数组空间读取数据的位置;数据写入成功,则writePos值自增;数据读取成功,则readPos值自增,将被成功读取的数组空间位置的指针值清零;定义一个整数掩码PosMask,其值为N‑1;通过PosMask的值与读写位置的值做与运算,来决定当前正要写入和读取的真正的数组空间的位置,即当前写入的位置应该是dataPtrArray[writePos&PosMask],读取的位置是dataPtrArray[readPos&PosMask]。 |
地址 |
610041 四川省成都市高新区天华一路99号天府软件园B6-7 |