With memory method (I'd never considered file IO), both threads have to access the buffer at about the same time.
Normally, a mutex or semiphore signals the write-thread to 'wait' while read occurs and the opposite when a write occurs.
In both cases, we're looking at some hold-up in the loop (more on the read-end, if it uses that same buffer to process).
Instead, maybe a linked-list, similar to a 'stack' (but on the heap) might be preferable to either a monolithic buffer or even a string array.
One could use _strdup, which would isolate the Readfile buffer and provide a stand-alone string which only requires a pointer to link to the list. The edit-processor reads -it's- string, processes it and loops back to get the next one.
By that time, ReadFile has 'pushed' several more strings onto our 'stack'.
Edit-process doesn't care about speed, it takes what it takes. If it doesn't find another string, it waits until either a string shows up or it gets an EOF string, after which it exits and a counter frees all the _strdup ptrs.
And except for the 'pushes', all that takes place in the edit-process thread, without any concurrent buffer read-writes.
But, the devil's in the details.