Eine Idee wäre: Ein array[0..N] of Queue, bei dem jeder Thread genau eine eigene Queue hat.
Delphi-Quellcode:
ThreadQueues: array[0..MaxThreads - 1] of TThreadedQueue<string>;
constructor TWorkerThread.Create(AQueueIndex: Integer);
begin
inherited Create(False);
FQueueIndex := AQueueIndex;
end;
procedure TWorkerThread.Execute;
var
Msg: string;
begin
while not Terminated do
begin
Msg := Format('Thread %d arbeitet...', [FQueueIndex]);
ThreadQueues[FQueueIndex].Enqueue(Msg);
Sleep(Random(100));
end;
end;
Keine Ahnung ob das geht. Aber so würde immer nur ein Thread schreiben und nur der Hauptthread lesen.