Я пытаюсь выполнить симуляцию с полным буфером. Когда мой буфер переполняется, мне нужно скопировать его для дальнейшей обработки, копирование является взаимоисключающей операцией, но дальнейшая обработка - нет.
Мой поток действий выглядит следующим образом: я проверяю состояние буфера каждый раз, когда собираюсь что-то написать, если условие выполняется, я копирую текущий буфер и обрабатываю его, а затем пишу новое сообщение.
У меня есть несколько тем, и сообщения должны быть написаны только в последовательности.
мои функции вкратце следующие:
bwrite(data)
{
lock(m1);
//invoke copy thread
lock(m1);
// Do write message
}
copy(data)
{
//copy the data
unlock(m1);
//Do further processing
}
Проблема в том, что после завершения копирования сообщения записываются в любой последовательности, например, если есть thread01
, & thread02
и если thread01
копирует первое, я не могу контролировать этот факт. что thread02
может начать копирование до того, как thread01
напишет свое последнее сообщение, поэтому возможна потеря сообщения.
Это был длинный вопрос, в основном мне нужен способ поместить входящие потоки в очередь, чтобы я мог гарантировать следующую последовательность выполнения.