Ответ 1
нет. Его использовали в качестве замены для очень коротких вызовов сна.
Когда вы выполняете многопоточную блокировку, если ресурс, который вы пытаетесь приобрести, уже заблокирован, вы обычно ложитесь спать и дождитесь его освобождения. Когда вы это сделаете, вы оставите оставшееся время, которое вы назначили планировщиком для использования процессора, чтобы кто-то еще мог уйти. Обычно это нормально, особенно при длительных ожиданиях, таких как ожидание ввода-вывода, на процессоре могут запускаться другие процессы, пока вы ждете вращения диска.
Однако иногда вы ждете крошечного количества времени. В таких случаях вы обычно отказываетесь от своего оставшегося времени и дожидаетесь того, что все остальные потоки будут делать свое дело, прежде чем идти дальше... так что вы можете обманывать, а не ждать, вы сидите там постоянно, показывая, что "мы почти еще? путь. Если блокировка удерживается только на оставшуюся часть времени, это становится очень эффективным средством ожидания, что также очень эффективно, так как планировщик не должен участвовать в перестановке всех других потоков, чтобы использовать время, которое вы сдаете если вы обычно ждали.
Очевидно, что если вы вращаетесь каждый раз, когда хотите блокировку, вы не будете очень популярны, ваше приложение станет вялым и будет использовать 100% процессор, но в очень малых дозах, в нужное время, это делает приложение более отзывчивое.
Если вы сейчас думаете, "когда я должен его использовать?", этот сложный вызов - если у вас есть ресурс, который очень часто блокируется и разблокируется очень быстро, тогда спин-блокировка вокруг этого вместо ожидания хорошая идея (а затем проверить приложение на производительность), если вы попробуете закрутить на короткое время, а затем вернуться к нормальному ожиданию, это тоже разумный путь. Но в целом вам никогда не понадобится его использовать.