I am developing an C++ application, in Linux environment, that has a class that reads and writes some configuration parameters in a file (JSON format preferentially). This class has many objects instantiated and I noticed that sometimes my file gets corrupted when the writeFile() and loadFile() are called at the same time from different instances.
For example, this is a part of my class (FileClass)
class FileClass
{
private:
static bool isInUse;
std::string fileName;
std::string fileContents;
public:
FileClass(std::string fileName);
void writeFile();
void readFile();
};
Initially, I was thinking in creating a queue that process all pending writeFile() and readFile() requests in a separated thread. However, I tried simply to add a static flag (i.e., isInUse) to be always set true when the writeFile or readFile functions are called and when these functions succeed this flag is set as false.
I noticed that, in the Linux, my file still gets corrupted intermittently. What is the best way to have many objects of the FileClass in my application and to prevent reading and writing to the file at the same time?