如题:比如现有程序需要使用两个线程:A、B;
A线程处理完某一操作后会返回处理结果字符串strRes;然后继续处理,处理完仍返回strRes。如此往复直到结束。
B线程利用A处理的结果strRes来继续处理数据,一直到完全处理完A返回的全部字符串strRes为止。
请问这样的多线程应该怎么写?
应该使用信号量?临界区?还是其他什么? 给出一些思路的伪代码就可以。谢谢了!多线程

解决方案 »

  1.   

    http://download.csdn.net/detail/robertbaker/5125457
      

  2.   

    1、用事件对象来控制,A处理完之后SetEvent, B调用WaitForSingleObject等待这个事件, 此函数返回时使用A返回的数据进行处理(AB使用串行的方式处理数据)2、将A的返回结果存入list, 在B中从list里面取出数据处理, 删除处理完的数据, 对这个list的操作代码使用临界区来控制(AB是并行的)推荐方式2
      

  3.   

    A线程通过自定义消息将数据发送给B;  在A线程结束时,发送一个结束消息。
    B中通过队列接收数据,当队列为空且收到A线程结束消息时,B线程停止处理。
    A线程
    {
       while(仍有数据待处理)
       {
          处理数据;
          发送结果给B线程;
       }
          发送结束消息给B线程;
          return 0;
    }B:
    A发送数据消息的处理函数
    {
       将消息放入队列;
    }
    A发送结束消息的处理函数
    {
       将结束标志位置为true;
    }
    B线程
    {
        while(队列不为空 || 结束标志位为false)
        {
            if(0 == 队列.size())
            {
                pop数据;
                处理数据;
            }
        }
        return 0;
    }
    俩线程不冲突,应该不需要临界量吧
      

  4.   

    补充一下,A线程应该和B线程同时开启,B线程等待A线程处理完数据直接获取新的数据而不必每一次都调用开启B线程。
      

  5.   

    我现在使用的就是这样的处理方式,我想看看按照信号量、临界区等处理方式有没有办法。我使用的是把A返回的结果放入Vector,但是vector本身并不支持多线程。如果B读取A写入同时进行,对于vector本身会不会有问题呢?我认为这样并不安全啊。
      

  6.   

    我采用的是类似于list的方法,但是STL中的list、vector这些都不支持多线程,换句话说可能在线程安全方面是存在问题的。至于1方法我觉得有待遇商榷,因为A线程处理速度快而B线程处理速度慢的话,1方法好像就不太可取了。
      

  7.   

    vector,list不是线程安全的,多线程操作加个锁就完事了呗
      

  8.   

    这个锁怎么加呢?如果加在vector、list的写入和读取上,势必造成另一个线程运行到写入或读取上的等待,这样会不会影响速度呢?而且A线程必须是一个连续的线程,不能有代码上的停顿的。
      

  9.   

    我现在使用的就是这样的处理方式,我想看看按照信号量、临界区等处理方式有没有办法。我使用的是把A返回的结果放入Vector,但是vector本身并不支持多线程。如果B读取A写入同时进行,对于vector本身会不会有问题呢?我认为这样并不安全啊。用queue?读取的时候是队首,写入的时候是队尾,应该安全吧
      

  10.   

    我现在使用的就是这样的处理方式,我想看看按照信号量、临界区等处理方式有没有办法。我使用的是把A返回的结果放入Vector,但是vector本身并不支持多线程。如果B读取A写入同时进行,对于vector本身会不会有问题呢?我认为这样并不安全啊。用queue?读取的时候是队首,写入的时候是队尾,应该安全吧
    一样的,queue本身也不是线程安全类型的。除非加锁,但是加锁又不太符合我的初衷。因为枷锁势必要导致在A线程处出现停顿的现象,但是我的A线程是连接硬件的,不能出现停顿。
      

  11.   

    我现在使用的就是这样的处理方式,我想看看按照信号量、临界区等处理方式有没有办法。我使用的是把A返回的结果放入Vector,但是vector本身并不支持多线程。如果B读取A写入同时进行,对于vector本身会不会有问题呢?我认为这样并不安全啊。用queue?读取的时候是队首,写入的时候是队尾,应该安全吧
    一样的,queue本身也不是线程安全类型的。除非加锁,但是加锁又不太符合我的初衷。因为枷锁势必要导致在A线程处出现停顿的现象,但是我的A线程是连接硬件的,不能出现停顿。A线程不用queue,只在B中使用。A线程只负责发送自定义消息。把B线程弄成界面线程,在消息循环里处理,还不安全??
      

  12.   

    不用你写 while,也不用你写队列,
      

  13.   

    我现在使用的就是这样的处理方式,我想看看按照信号量、临界区等处理方式有没有办法。我使用的是把A返回的结果放入Vector,但是vector本身并不支持多线程。如果B读取A写入同时进行,对于vector本身会不会有问题呢?我认为这样并不安全啊。用queue?读取的时候是队首,写入的时候是队尾,应该安全吧
    一样的,queue本身也不是线程安全类型的。除非加锁,但是加锁又不太符合我的初衷。因为枷锁势必要导致在A线程处出现停顿的现象,但是我的A线程是连接硬件的,不能出现停顿。A线程不用queue,只在B中使用。A线程只负责发送自定义消息。把B线程弄成界面线程,在消息循环里处理,还不安全??
    这样的倒是可以,多谢了!