But I'm worried that there might be something I'm missing that will cause me to lose data.
What happens if a process finds it can't write to the file? Will you queue that data for later? If not, there's data loss right there.
If losing data is the real concern, why not use a database that has no issues with simultaneous writes? How about an asynchronous system where one function queues up all of the data from all processes, then writes the file when it knows it's safe to do so?
You haven't described the type of data being written, so I'm just guessing.