Кто ответственен за расположение HttpPostedFile. InputStream - и когда?

Состояние состязания происходит, когда два или больше потока могут получить доступ к совместно используемым данным, и они пытаются изменить его одновременно. Поскольку алгоритм планирования потоков может подкачать между потоками в любое время, Вы не знаете порядка, в котором потоки попытаются получить доступ к совместно используемым данным. Поэтому результат изменения в данных зависит от алгоритма планирования потоков, т.е. оба потока "мчатся" для получения доступ/изменения к данным.

проблемы часто происходят, когда один поток делает "check-then-act" (например, "проверьте", ли значение X, то "действуйте", чтобы сделать что-то, что зависит от значения, являющегося X), и другой поток делает что-то к значению, промежуточному "проверка" и "действие". Например:

if (x == 5) // The "Check"
{
   y = x * 2; // The "Act"

   // If another thread changed x in between "if (x == 5)" and "y = x * 2" above,
   // y will not be equal to 10.
}

точка быть, y мог быть 10, или это могло быть что-либо, в зависимости от ли другой поток измененный x, промежуточный проверка и действие. У Вас нет реального способа знать.

, Чтобы препятствовать тому, чтобы условия состязания произошли, Вы обычно помещали бы блокировку вокруг совместно используемых данных, чтобы гарантировать, что только один поток может получить доступ к данным за один раз. Это означало бы что-то вроде этого:

// Obtain lock for x
if (x == 5)
{
   y = x * 2; // Now, nothing can change x until the lock is released. 
              // Therefore y = 10
}
// release lock for x
10
задан Eamon Nerbonne 24 July 2009 в 09:22
поделиться

1 ответ

Исходя из моего опыта работы с ним, я бы сказал, что он выпускается сразу после завершения обработки запроса. Например, если бы я подбросил мяч в воздух. Если я не поймаю его и он упадет на землю ... его утилизируют. Если я поймаю его и что-то с ним сделаю ... а потом отбрось, он утилизируется. Он не остается для вас, чтобы вы могли поиграть с ним в следующем запросе!

Обращаясь к проблеме сохранения его в сеансе, я бы сказал НЕТ! Если вам нужно, чтобы он просуществовал какое-то время, запишите его в файловую систему. Когда он вам снова понадобится, воссоздайте его как поток и поиграйте с ним. Хранение файлового потока в сеансе (возможно, в виде байтового массива?) Звучит как огромная трата ресурсов сеанса (памяти).

7
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: