Когда одновременное выполнение двух критических секций дает результаты в неизвестном порядке? - PullRequest
0 голосов
/ 07 октября 2018

См. Galvin et.al. Концепции операционной системы, 8-е издание, 6-я глава, раздел 6.9, стр. 257. В нем говорится: «Если два критических раздела выполняются одновременно, результат эквивалентен их последовательному выполнению в некотором неизвестном порядке. Хотяэто свойство полезно во многих областях приложений, во многих случаях мы хотели бы убедиться, что критический раздел образует единую логическую единицу работы, которая либо выполняется полностью, либо не выполняется вообще ".Когда это свойство полезно?Пожалуйста, объясните, спасибо заранее!Кроме того, пожалуйста, предложите мне немного овощей!

1 Ответ

0 голосов
/ 07 октября 2018

Это свойство полезно (поскольку оно увеличивает потенциальный параллелизм), когда порядок выполнения критических секций не имеет значения.

Для более сложного примера;скажем, у вас есть поток, извлекающий следующий блок из файла, поток, сжимающий текущий блок, и поток, отправляющий ранее сжатый блок в сетевое соединение.

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

...