多线程间数据访问问题

若现开启三个串口 分别为三个线程不断接受数据

void COM1()
{
        while(1)
        {
                a1=recv1_1();
                a2=recv1_2();
                Sleep(5);
        }
}
void COM2()
{
        while(1)
        {
                b1=recv2_1();
                b2 = recv2_2();
                Sleep(5);
        }
}
void COM3()
{
        while(1)
        {
                c1=recv3_1();
                c2 = recv3_2();
                Sleep(5);
        }
}

主线程在某时刻需要使用该时刻的a1 a2 b1 b2 c1 c2 变量

void main()
{
    XXX
}

问:主线程使用以上几个变量的时候应注意什么才能保证几个变量是同一时刻的, (比如说主线程采集到a1,而时间片轮转到另一个线程,再采集a2的时候就是另一个时间的了),只需要对子线程的变量加临界区就行吗?

谢谢!
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^