Состояние гонки без потоков? - PullRequest
3 голосов
/ 09 августа 2010

Допустим, у меня есть: sample.c

int main (...) {

  char str*;

  get s through user input

  test(str);

  return 0;

}

void test (str) {

   copy str to new file 

   change file permissions on new file

   close file

}

Здесь нет возможности состояния гонки, так как у меня нет потоков в моем методе main (). Это правда?

Ответы [ 5 ]

8 голосов
/ 09 августа 2010

Существует своего рода условие гонки, при котором пользователь может обмениваться «новым файлом» непосредственно перед тем, как вы измените права доступа к «новому файлу».Это (был?) Часто используемый эксплойт безопасности.

Я просто вижу, что у Нила Баттерворта была похожая идея.

6 голосов
/ 09 августа 2010

Существует возможность гонки - два пользователя могут запустить вашу программу одновременно.

1 голос
/ 09 августа 2010

Другим источником условий гонки являются прерывания и сигналы.Если вы не используете ни то, ни другое состояние гонки не произойдет (есть один гонщик )

0 голосов
/ 09 августа 2010

Документы boost :: filesystem имеют хорошее объяснение состояния гонки файловой системы, которое применимо к файловым системам в целом.

0 голосов
/ 09 августа 2010

Каждый раз, когда вы делаете системный вызов, существует вероятность состояния гонки. Это потому, что ядро ​​связывает все потоки в системе и позволяет контролировать взаимодействие между процессами. В этом случае другой поток в системе может получить доступ к тому же файлу, что и ваше приложение.

...