Я как бы знаком с многопоточным C/Linux, но на этот раз мне нужно сделать некоторую работу с C++ в Windows, но я не мог ее разглядеть. В моей программе у меня есть 2 функции, которые постоянно пытаются достичь одного и того же файла, чтобы сделать некоторые операции печати, и что происходит, один из них никогда не работает, что заставляет меня думать, что функция никогда не может открыть файл, потому что другая всегда может писать на нем. Как я могу реализовать потоки, чтобы сделать эту работу? Код выглядит примерно так:C++ многопоточность и мьютексы
std:mutex mut;
main(){
while(1){
//get mychar from user
print1(mychar, "my.txt");
print2();
}
}
print1(int i, char* file){
FILE *f = fopen(file, "a");
/*print operations
..
.*/
fclose(f);
return 0;
}
void print2(){
/*getting a string
...
Sleep(200);
getting another string
...*/
char getX[]; //fill buffers with the strings accordingly
char getY[]; //basically i want to know if the initial string has changed
if(*getX != *getY){
std::Lock_guard<std::mutex> guard(mut);
FILE *f = fopen("my.txt", "a");
fprintf(f, "%s ", getY);
fclose(f);
}
getX = NULL;
getY = NULL;
}
Что такое 'a' здесь:' FILE * f = fopen ("my.txt", a); '? – huu
О, я имел в виду '' '' 'для режима добавления. Я сразу же отредактирую – gadria
, почему нет мьютекса в print1? и я считаю, что вам нужно делать fopen также в охраняемом регионе –