辅助线程从串口读数,我开了一个大小为20的数组,当数组存满后,向主线程发送消息,主线程从数组中取数,但同时辅助线程还在取数吧(?),那么如何协调这两个线程的读取关系呢?

解决方案 »

  1.   

    存取的时候锁住...使用临界区
    CRITICAL_SECTION csRecvRead  = {0};
    InitializeCriticalSection(&csRecvRead);// 临界区初始化
    EnterCriticalSection(&csRecvRead);// 使用临界区变量
    pRightBuffer = pRightBuffer + len;
    LeaveCriticalSection(&csRecvRead);
      

  2.   

    用临界区。http://www.vckbase.com/document/viewdoc/?id=727
      

  3.   

    区域开大点..............cpu处理的速度远远快于串口读取的速度,不存在这个担心
      

  4.   

    CPU相对于串口德速度肯定快很多,瓶颈不是在取数,重要的是看你的数据处理有多复杂
    比如,你要对心电图数据做大量分析或显示(假设需要十几妙钟完成)那开多大空间也不够
    只能用链表增量存储,用两个指针,一个指响表尾,用于写线程写入数据,一个指向表头,用于读线程读入数据,写线程受到数据就分配一个空间,读线程受到一个数据就删除当前空间这样做效率可能低点,但对于你处理这样重要的数据还是很有用的,起码做到不让任何数据丢失
    你的处理线程可以任意时间去处理数据,安全
      

  5.   

    象happyparrot说的,我想说一下看法,不知道对不对
    如果做标志判断的话,一般情况是可以的,但标志毕竟不是CRITICAL的,假设当前出现这种情况
    写线程要写数据块A,它首先读A的标志,但此时读线程要读数据块A,它首先要写A的标志,这时候会出现不安全的情况,虽然概率很小我觉得处理这样重要的数据,以效率换安全也不为过