gpt4 book ai didi

c++ - 有没有办法排队线程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:50 26 4
gpt4 key购买 nike

我正在尝试进行缓冲区完全模拟。当我的缓冲区变满时,我需要复制它以供进一步处理,复制是一个互斥的操作,但进一步的处理不是。我的操作流程是这样的,每次我要写一些东西时,我都会检查缓冲区满的情况,如果条件为真,我会复制当前缓冲区并对其进行处理,然后写入新消息。

我有多个写入线程,消息应该只按顺序写入。我的简要功能如下

bwrite(data)
{
lock(m1);
//invoke copy thread
lock(m1);
// Do write message
}

copy(data)
{
//copy the data
unlock(m1);
//Do further processing
}

问题是,一旦复制完成,消息就会按任何顺序写入,例如如果 thread01thread02 在那里,如果 thread01 复制第一个 我无法控制 thread02 可能会在 thread01 写入最后一条消息之前开始复制,因此可能会丢失一个消息。

这是一个很长的问题,基本上我需要一种方法将传入的线程放入队列中,以便我可以保证下一个执行顺序。

最佳答案

为什么不让线程写入共享队列?然后你可以让另一个线程一次一个地从队列中取出元素并写入它们——这保证了它们的写入顺序与它们排队时的顺序相同。现在您只需要同步对队列的访问以使其线程安全。

关于c++ - 有没有办法排队线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com