list1,list2threadA()
{
while(1)
{
new obj1;
list1.AddTail(obj1);
PostMessageToThreadB();
}
}threadB::OnReceiveMessage()
{
new obj2;
list2.AddTail(obj2);
}
threadC()
{
while(1)
{
while(list1.RemoveHead())
//do...
while(list2.RemoveHead())
//do... }
}上面就是程序的大概结构.有两个队列,先进先出的.
线程A和线程B向两个队列里依次插入数据. 顺序是先A后B, 而且是一一对应的.
线程C依次处理两个队列里的数据.限制是,对于一次产生的两条数据,必须是先处理队列1,后处理队列2的.现在有多个线程A的实例,还有多个线程C的实例.出现了问题:
当执行while(list2.RemoveHead())的过程中,
如果线程A新产生了一条数据,分别插入了队列1和队列2,就会先执行队列2,后执行队列1.如何避免这种问题?
{
while(1)
{
new obj1;
list1.AddTail(obj1);
PostMessageToThreadB();
}
}threadB::OnReceiveMessage()
{
new obj2;
list2.AddTail(obj2);
}
threadC()
{
while(1)
{
while(list1.RemoveHead())
//do...
while(list2.RemoveHead())
//do... }
}上面就是程序的大概结构.有两个队列,先进先出的.
线程A和线程B向两个队列里依次插入数据. 顺序是先A后B, 而且是一一对应的.
线程C依次处理两个队列里的数据.限制是,对于一次产生的两条数据,必须是先处理队列1,后处理队列2的.现在有多个线程A的实例,还有多个线程C的实例.出现了问题:
当执行while(list2.RemoveHead())的过程中,
如果线程A新产生了一条数据,分别插入了队列1和队列2,就会先执行队列2,后执行队列1.如何避免这种问题?
你看这样行不,
为什么不设置一个对象来管理list呢
提供一个获取obj1的接口,
获取obj2的接口,参数就是同一次的obj1,然后就是在这个管理对象里面做好同步
{
while(1)
{
int nIndex = 0;
while(list1.RemoveHead())
nIndex++;
//do...
while((list2.RemoveHead()) && (nIndex > 0))
nIndex--;
//do... }
}
是这个意思么?