本人用一条线程向一个Vector实例里压不断压数据并在另外一个线程里面读取出来并写入文件。但当输入数据一增大,使用begin()获取到的元素有时候会变成一些莫名其妙的值导致程序运行出错(不是为NULL,其一般都是指向一个很大的内存地址)。请问这是为什么?

解决方案 »

  1.   

    用临界区CRITICAL_SECTION在插入和读取的时候加锁
      

  2.   

    stl不是线程安全的,要自己实现不同线程间对stl对象访问的同步
      

  3.   


    增加时就直接通过push_back函数来增加。读取就用begin(),之后就使用V_Data.erase(V_Data.begin())来将已读取的元素删除。
      

  4.   

    LS的说的很对,多线程访问同一内存得有同步操作。
    最简单的用CSingleLock就行
      

  5.   

    如果要提高效率,就不要用STL。自己做了链表,尽量通过InterLocked指令避免线程冲突。