Хотелось бы узнать, может ли моя программа участвовать в гонке или нет? Если да, пожалуйста, дайте мне пример, потому что я не вижу никого.Понимание состояния гонки
#define STRING_SIZE 1024
char *string;
int main(int argc,char**argv){
int length;
if(argc != 2) return ;
length = strlen(string);
strncpy(string+length,argv[1],STRING_SIZE,STRING_SIZE-length);
return 0;
}
что делать, если я сделаю замок? это исправляет проблему?
#define STRING_SIZE 1024
int lock;
char *string;
int main(int argc,char**argv){
int length;
while(lock != 0){}
lock = 1;
if(argc != 2) return ;
length = strlen(string);
strncpy(string+length,argv[1],STRING_SIZE,STRING_SIZE-length);
lock = 0;
return 0;
}
для условий гонки вы должны иметь 2 потока или обрабатывать доступ к одному объекту в одно и то же время и по крайней мере один из них хочет изменить этот объект. можете ли вы указать, что является вашим процессом или потоками и каков ваш объект? –
ну переменная * строка находится в общей памяти, поэтому я предполагаю, что если я запустил программу дважды, это сделало бы условие гонки нет? –
, давая 'int' имя переменной' lock', не делает ее реальной блокировкой. – Dabo