Расовые условия в методах класса Ruby - PullRequest
1 голос
/ 18 августа 2010

Я работаю над проектом интеграции API в Ruby, и я собирался создать метод класса, который бы немного следовал тому, что Rails делает с методами поиска, но я не стал этого делать, потому что был обеспокоен, что могу представить гонкуусловие.

Я бы не стал ничего хранить в переменных-членах, просто создавал бы экземпляры объектов с помощью метода class и делал внешние вызовы API, поэтому все было бы локально ограничено (внутри метода class).Тем не менее, не существует ли потенциального состояния гонки, когда несколько потоков проходят через этот метод класса?Как методы класса Rails finder избегают этого?Или я чего-то не понимаю на более фундаментальном уровне?

1 Ответ

2 голосов
/ 18 августа 2010

Возможно, вы не понимаете, как работают потоки, или что вы не описываете какую-то часть вашей проблемы, которая могла бы стать источником состояния гонки.

Простой вызов метода в двух разных потокахнедостаточно, чтобы вызвать состояние гонки.Если не существует какого-либо общего ресурса, который может находиться в несогласованном состоянии, поскольку другой поток находится в процессе его использования, условие гонки на самом деле не является проблемой.

Если все ваши переменные находятся в области действия метода,тогда единственным источником расы, который я могу почерпнуть из вашего описания проблемы, могут быть вызовы API.Если возможно, что в то время как один поток находится в середине доступа к API, другой проходит и перезапускает все происходящее взаимодействие, и это будет проблематично, у вас могут возникнуть проблемы с гонкой.

...