c практика многопоточного программирования pdf

C практика многопоточного программирования pdf

повтор первой книги плюс небольшая добавка

Рейтинг: 0 ( 0 за, 0 против).

повтор первой книги?

Рейтинг: 0 ( 0 за, 0 против).

Что не так с украинскими военными? Может Вы не в курсе, но в 2014 году к нам посылали именно «карательные добровольческие батальоны для усмирения Донбасса», т.е. для усмирения людей которые не приняли антиконституционный переворот который провернули американцы и европейцы при молчаливом попустительстве и даже поддержке киевлян.
А. Геращенко https://www.youtube.com/watch?v=cEbonEOnfUY

Рецензию Вашу, в целом, поддерживаю. Так оно и есть. Долго слишком писалась серия))

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

Как постепенно коммунисты и Сталин становятся практически врагами, и начинается новая эпопея — спасения царской России. Как я понимаю, с удовольствием бы автор переписал книгу, где Сталин и Берия — два монстра, но уж очень много работы 🙂

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

Кстати, каратели — от слова «карать». Например, те же партизаны — каратели немцев за то, что они устраивали с гражданским населением 🙂 Так вот, кого и за что «карают» в книге украинские военные? Просто слово, которое нынешняя пропаганда возвела в ранг культа, как и слово «нЕзалЕжная» вместо «Украина».

Грустно. Если оборвать примерно 6-7 книгой — ну, еще читаемо, а вот дальше. 🙁

Рейтинг: +4 ( 5 за, 1 против).

Нет продолжения, не нашел нигде((

Рейтинг: 0 ( 2 за, 2 против).

довольно неплохо, вроде как книга 1, а где продолжение?

Источник

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ

1 ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ Тема 14 Использование конечных автоматов для разработки и анализа неблокирующих алгоритмов. Д.ф.-м.н., профессор А.Г. Тормасов Базовая кафедра «Теоретическая и Прикладная Информатика», МФТИ

2 Тема Использвание конечных автоматов для разработки и анализа неблокирующих алгоритмов. Пример конечного автомата с «всегда корректными» состояниями для создания неблокирующей хеш таблицы. Доказательства корректности предложенной хеш таблицы. Кафедра информатики МФТИ 2

3 Хеш таблицы и MP Хеш таблицы высокоэффективные структуры данных, котоые могут дать время операций О(1) При эффективной реализации Для корректной поддержки работы в условиях SMP требуется много усилий Один или несколько синхронизационных примитивов для обслуживания обращений Может плохо работать в условиях интенсивной нагрузки (lock contention/ ) Каждый из них обычно требует, как минимум, 1 операции с блокировкой шины типа LOCK CMPXCHG Хорошая цель для создания неблокирующих алгоритмов см предыдущую тему Создание корретных алгоритмов непросто, требует доказательства Кафедра информатики МФТИ 3

4 Общие требования Хеш таблица есть коллекция пар (ключ, значение) Должна быть быстрой при сложности доступа О(1), накладные расходы превысят затраты на собственно работу основных алгоритмов Должна принимать во внимание кеш Ключ и значение на одной линии Автоматическое изменение размера по мере надобности Не должна делать аллокаций памяти на add/del Кафедра информатики МФТИ 4

5 Варианты реализации // Пример кода для get(key) idx = hash = key.hashcode(); // цикл по коллизиям while( true ) < // ограничим индекс размером idx &= (size-1); // обратимся к кешу заранее k = get_key(idx); // запомним значение h = get_hash(idx); if( k == key (h == hash && key.equals(k)) ) // нашли, возвращаем return get_val(idx); if( k == null ) // нет, возвращаем 0 return null; // следующая коллизия idx++; >Кафедра информатики МФТИ 5 Можно использовать, например, размер таблицы как простое число, и использовать операцию MOD Правда, MOD примерно в 30 раз медленне чем AND Можно использовать открытые таблицы (с односвязными списками), но. Требует аллокацию на add() Идем по ссылкам типа next Каждый next == промах кеша!

6 Варианты реализации Как доказывать корректность работы? Модель упорядоченности памяти, барьеры, «событие а было до события б» и тд Много функций (add, del, addifno, change, lookup и тд) Используем конечный автомат Кафедра информатики МФТИ 6

7 Конечный автомат Определим все возможные значения для пар состояния Определим переходы из состояния в состояние Покажем, что ВСЕ состояния легальны Кафедра информатики МФТИ 7

8 Состояния и переходы Последовательность чтения-записи в память не важна! lookup может читать key и value в любом порядке add может менять key и value в любом порядке put должно использовать CAS для изменения key и value (не одновременно!) Для корректности не нужен барьер памяти Правда, иногда может потребоваться более сильная гарантия тогда может быть потребуется барьер Доказательство корректности алгоритма в целом просто Кафедра информатики МФТИ 8

10 Диаграмма переходов Кафедра информатики МФТИ 10

11 Замечания После добавления ключа изменение его невозможно Нельзя вернуть неправильный ключ Увы, но таблица будет заполняться мертвыми ключами со временем Как бороться с этим покажем чуть позже (через resize) Нет гарантий упорядоченности операций Если надо «сделай сам» разрешено, но бессмысленно Прочлось пустое значение ключа «промазали» (порядок чтениязаписи?) Кафедра информатики МФТИ 11

12 Замечания Нет единого согласованного состояния всего автомата Никто не гарантирован в возможности считывания того же самого состояния Разве что на том же CPU без других писателей Да это и не нужно! По сути, предоставляются ТЕ ЖЕ гарантии, что и для одноячечной глобальной разделяемой переменной Много читателей и писателей без взаимной синхронизации Кафедра информатики МФТИ 12

13 Больше гарантий Возможно, надо иметь гарантии порядка для Value Примерно то же самое, что объявить volatile нашу «разделяемую переменную» Если чтото записали до (add), то оно должно быть видно после (lookup) Надо: барьер до CAS на запись (бесплатно для x86) Надо: барьер после чтения Value на чтение данных Кафедра информатики МФТИ 13

14 Проблема размера Таблица переполняется или забивается удаленными элементами Решение: автоматическая процедура переписи пар в новую таблицу (может быть, большего размера) соисполнимая с add/del/lookup Много интересных проблем барьер упорядоченность относительно таблиц не забыть последнюю запись в старую таблицу и т.д. Кафедра информатики МФТИ 14

15 Проблема размера Добавляем несколько новых состояний, причем получается что состояние частично скопировано должно быть нормальным lookup работает со старой таблицей пока не увидит специальной отметки add всегда работает с новой Постоянно надо проверять новую таблицу Кафедра информатики МФТИ 15

18 Копирование пары Кафедра информатики МФТИ 18

19 Выводы Рассмотрена на методика создания алгоритмов, упрощающая доказательство их корректности и технику создания, путем создания машины состояний с атомарными переходами Если все состояния корректны, и переходы корректны (выполняются гарантированными примитивами), то и машина корректна! Требует аккуратного анализа барьеров и «относительности» Понятие корректности нетривиально, похоже на работу с одной переменной, чем со структурой данных со сложными состояниями со всеми плюсами и минусами Кафедра информатики МФТИ 19

Источник

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ

1 ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ Тема 12 Консенсус в системе со сбоями. Теорема FLP о невозможности. Д.ф.-м.н., профессор А.Г. Тормасов Базовая кафедра «Теоретическая и Прикладная Информатика», МФТИ

2 Тема Консенсус в системе со сбоями Один из самых фундаментальных и достаточно неожиданных теоретических результатов, полученных в современной науке о вычислительных системах. Теорема Фишера, Линч и Патерсона о невозможности консенсуса в системе со сбоями (FLP impossibility) Следствия теоремы Теоретическая и Прикладная Информатика, МФТИ 2

3 свобода от ожидания Определение подразумевает «устойчивость ко сбоям» Алгоритм, вне зависимости от поведения соседей, должен завершиться за конечное число шагов Даже если сосед замедлился, застрял или умер Рассмотрим утверждение, касающееся работы таких систем «со сбоями» в обобщенном смысле Теоретическая и Прикладная Информатика, МФТИ 3

4 асинхронная система Полностью асинхронная система нет никаких предположений о последовательности операций рассматривается в работе Fischer, Lynch, и Paterson Теоретическая и Прикладная Информатика, МФТИ 4

5 асинхронная система Потоки обмениваются сообщениями через буфер send(p,m) помещает сообщение m, адресованное p, в буфер обычно помещается пара (p,m) полная характеристика события receive(p) удаляет из буфера сообщение для p, и возвращает m может вернуть предопределенное значение null нет ничего нет обязательств системы доставки сообщения по порядку их доставки нет обязательств даже по их присутствию в буфере может вернуться null даже если пара (p,m) присутствует в буфере Теоретическая и Прикладная Информатика, МФТИ 5

6 FLP impossibility Теорема. Система соисполняемых потоков, обменивающихся сообщениями, в которой потоки могут быть неограниченно задержаны (сбоить), или сообщения могут быть переставлены, не может достигнуть консенсуса. Идея если среди коммуницирующих объектов один завис на неопределенное время (по любой причине, например, из-за сбоя канала, собственного сбоя и т.д.), то у нас нет никакого основания думать, что все участвующие в консенсусе «дождутся» неработающего объекта, чтобы принять действительно правильное решение за ограниченное время. Теоретическая и Прикладная Информатика, МФТИ 6

7 FLP impossibility Доказательство оригинальное доказательство доказывает существование последовательность событий (обмена сообщениями), которое никогда не ведет к консенсусу. То есть, из некого начального бивалентного состояния можно сделать ход в другое бивалентное состояние, и всегда может существовать новое бивалентное состояние, куда мы можем перейдти (и, собственно, доказыватеся что оно всегда существует). Рассмотрим более конструктивное доказательство, которое показывает, КАК можно найдти тот самый «плохой» путь, «ломающий» асинхронную систему (предложено в 2004 году Фольцером). Теоретическая и Прикладная Информатика, МФТИ 7

8 FLP impossibility Конфигурация с состоит из вектора состояний процессов, соотнесенного с идентификатором каждого процесса (P->S) и конечного мультинабора msgs c сообщений, выполняемых в с (состояние процессов + содержимое буферов сообщений). Событие (p,m) разрешено в c если msgs c содержит в себе (p,m) c-(p,m)->c последующая конфигурация через событие (p,m) Пусть с есть последующая за с конфигурация, если она получается из с удалением (p,m) из msgs c, изменением состояния p и добавлением к msgs c набора состояний в соответствии с возможностями p в новом состоянии p. Теоретическая и Прикладная Информатика, МФТИ 8

10 FLP impossibility Лемма о бриллианте («коммутативность» последовательностей исполнений) если с =Q=> c 1 и с =-Q=> c 2, то существует с такой, что с 1 =-Q=> c и с 2 =Q=> c Конфигурация достижима, если существует σ- последовательность исполнения из некоторого начального значения, встречающаяся в σ. Процесс p является корректным в σ, если для любого i, разрешающего c i, существует j > i такая, что x j есть шаг p (отсутствие сбоев в процессе). Последовательность исполнения σ честная, если для каждого сообщения m существует корректный в σ процесс p, и для каждого события (p,m), разрешенного в c i, сущестует j>i такой, что x j = (p,m). Теоретическая и Прикладная Информатика, МФТИ 10

11 FLP impossibility Честная последовательность исполнения σ является t-допускающей (t n), если существует не более t процессов, не являющихся корректными в σ. Алгоритм решает задачу о t-устойчивом консенсусе, если каждая t- допускающая последовательность удовлетворяет условиям консенсуса (непротиворечивости, корректности и завершенности). Пусть для всех процессов есть начальное состояние с 1 сообщением, и все каналы (передачи сообщений) пусты. Назовем «принятием v» ситуацию, когда есть процесс, который принимает значение v в последовательности исполнения, а конфигурацию «v-решенной», если есть «выход» из нее с решением. Теоретическая и Прикладная Информатика, МФТИ 11

12 FLP impossibility Алгоритм решает задачу о t-устойчивом псевдо-консенсусе для t n, если каждая t-допускающая последовательность удоволетворяет условиям консенсуса о непротиворечивости и корректности для каждой достижимой конфигурации с и каждом наборе процессов Q P количеством более или равном n-t, существует конфигурация с, являющаяся v-решенной для некоторых значений v с =Q=>c. Существует алгоритм, решающий эту задачу в нашей модели тогда и только тогда, когда n 2t+1 Теоретическая и Прикладная Информатика, МФТИ 12

13 Идея доказательства Очевидно, что каждый алгоритм решения задачи t-устойчивого консенсуса является алгоритмом t- устойчивого псевдо-консенсуса. Если каждый 1-устойчивый алгоритм псевдоконсенсуса имеет имеет допустимый процесс исполнения, который никогда не принимает решение, то не существует и 1- устойчивого алгоритма консенсуса. Теоретическая и Прикладная Информатика, МФТИ 13

14 FLP impossibility Пусть с есть достижимая конфигурация и p процесс. Скажем, что значение v <0,1>есть p-игнорирующее решение с, если существует v-решенная конфигурация c такая, что c =-p=>c. Обозначим набор всех p-игнорирующих решений как val(p,c). достижимая конфигурация с является v-равной, если val(p,c)= для всех p и неравной если она не является ни 0- равной, ни 1-равной. Теоретическая и Прикладная Информатика, МФТИ 14

15 v-равность понятие v-равности является более слабым, чем понятие бивалентности Конфигурация бивалентна, если 0-решающая, так же как и 1-решающая конфигурации достижимы из нее. Из v-равности следует бивалентность, но не наоборот, бивалетность не означает v-равности. Теоретическая и Прикладная Информатика, МФТИ 15

16 Лемма Лемма пусть с достижимая конфигурация. 1. Для каждого процесса p: val(p,c). 2. Если с есть v-решенная конфигурация, то она также v-равная Теоретическая и Прикладная Информатика, МФТИ 16

17 Лемма Лемма пусть с =(p,m)=>c и q есть процесс. 1. p q влечет val(q,c ) val(q,c) 2. p = q влечет val(q,c) val(q,c ) 3. val(q,c) = <0>влечет val(q,c ) <1>. Доказательство 1 следует из определения. 2 пусть v принадлежит val(p,c). Тогда существует v-решенная конфигурация c v такая, что c =-p=> c v. Из леммы о бриллианте следует существование с такая, что c v =p=> c и c =-p=> c. Из первой части следует, что c есть v-решенная конфигурация, и вместе с последним утверждением, v val(p,c ). 3 следует непосредственно из 1 и 2. Теоретическая и Прикладная Информатика, МФТИ 17

19 Лемма Лемма для каждой неравномерной конфигурации c и каждого процесса p существует конфигурация c такая, что с=>c и val(p,c)=<0,1>. Доказательство Если val(p,c)=<0,1>, то утверждение доказано. Если нет, то пусть val(p,c)= <0>(без потери общности). Так как c неравномерна, то существует процесс q такой, что 1 val(q,c). Следовательно, существует 1-решенная конфигурация с 1, такая, что c =>c 1. Так как c 1 есть 1-решенная, то val(p,c1) = <1>. Из 3 утверждения доказанной леммы, существует c такая, что c=>c =>c 1 и val(p,c )= <0,1>что и требовалось доказать. Теоретическая и Прикладная Информатика, МФТИ 19

20 Теорема о невозможности Пусть есть конечная последовательности исполнения σ= c 0,x 1,c 1,x 2,,c k и (p,m) разрешено в c k. Время разрешения для (p,m) есть самое малое значение позиции l в σ, и c j разрешает (p,m) для всех j=l. k и x j (p,m) для всех j = l+1. k. Теорема Каждый 1-устойчивый алгоритма псевдо-консенсуса имеет 0-допускающую последовательность исполнения, которая не принимает решения. Доказательство. Построим такую последовательность, которая не принимает решения. Начнем с начальной неравной конфигурации (существующей в соответствии с доказанной выше леммой). Затем, будем повторять следующие действия: Теоретическая и Прикладная Информатика, МФТИ 20

21 Теорема о невозможности Возьмем разрешенный шаг (p,m) с минимальным временем разрешения В соответствии с доказанной леммой, расширимся до конфигурации с такой, что val(p,c) = <0,1>. Эта конфигурация с является неравной. Если (p,m) разрешено в с, то пусть оно произойдет и мы перейдем в c. Из леммы, val(p,c )= <0,1>и c является неравным. Таким образом, мы получили честную последовательность исполнения, где все процессы корректны и которая всегда неравная, то есть не принимает решения! Еще раз: если v не является p-игнорирующим решением, то движемся в сторону решения по v, пока оба значения не станут p-игнорирующими а это нам гарантирует, что после события (p,m) оба значения могут встретиться. Теоретическая и Прикладная Информатика, МФТИ 21

22 Замечание Библиотеки параллельного программирования часто используют очереди Fastflow Вычисления на сети вычислителей (или конвейере) Для их соединения используется SPSC очередь FIFO (lock/interlock free), использующая только регистры чтения-записи! Intel TBB и другие Конвейеризация и соединение объектов MPMC FIFO один из основых способов То есть мы организовали «композицию» объектов типа регистры для решения универсальных проблем программирования? А как же число конесенуса (1 для регистров, 2 для очереди и тд?) Теоретическая и Прикладная Информатика, МФТИ 22

24 Замечание Пусть объект консенсуса реализован только через регистры как свободный от зависаний или свободный от взаимных исключений объект взаимной блокировки то есть, получился мутекс (возможно ли это?) Реализация гарантирует только условный прогресс ОС должна гарантировать выход из критической секции для глобального прогресса То же самое можно сделать через свободные объекты (как упражнение) Решить проблему консенсуса свободными объектами невозможно. А где доказательство невозможности будет «ломаться» если у нас есть «оракул», тормозящий некоторые потоки так, чтобы наблюдался прогресс? Теоретическая и Прикладная Информатика, МФТИ 24

25 Замечание Мы рассматриваем только детерминистические объекты Их состояние полностью определяет ответ любой применяемой операции и новое состояние объекта после нее Пример «естественного» недетерменитстического объекта очередь с приоритетами и возможностью размещения одинаковых значений несколько значений имеют один приоритет естественно разрешить взять любой из них То есть работа с недетерменистическими объектами часто необходима на практике Теоретическая и Прикладная Информатика, МФТИ 25

26 надежность иерархии Понятие надежности иерархии заключается в 100% невозможности создать объект более высокой иерархии из любых объектов низшей иерархии Существует доказательство надежности иерархии консенсуса для детерменистических объектов Но, существуют разные варианты недетерменистических расширений, для которых доказано, что иерархия является ненадежной (условно или безусловно) Любые модификации требований к объекту синхронизации могут вывести его из рассматриваемого класса и предоставить дополнительные возможности разработчику Обычно за это надо платить чем-то сложностью, условным прогрессом и т.д. Теоретическая и Прикладная Информатика, МФТИ 26

27 Выводы Рассмотрели консенсус в системе с непредсказуемыми событиями Доказали его невозможность в классической постановке Для доказательства ввели серию понятий, в частности, более слабое, чем бивалентность, понятие неравности. Практическое использование базовых определений сложно, и часто используются всевозможные «послабления» Любое изменение требований обычно выводит задачу в область, где иерархия может быть ненадежной особенно, связанное с внесением асинхронности в систему Есть много систем, практически использующих неблокирующие примитивы для построения реально работающих систем общего назначения Анализ таких систем требует аккуратности в рассмотрении требований и условий Теоретическая и Прикладная Информатика, МФТИ 27

Источник

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ

1 ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ Тема 4 Языки программирования и многопоточность, конкурентный доступ Д.ф.-м.н., профессор А.Г. Тормасов Базовая кафедра «Теоретическая и Прикладная Информатика», МФТИ

3 Как мы думаем? Программист думает в терминах «операторов», обычно умозрительно выполняя их дискретно и последовательно С его точки зрения, каждый оператор «почти атомарен» (кроме: препроцессора, выражений со скобками, логических выражений и тд) Можем ли мы выполнить половину оператора a = 1.0? Будет ли внутри а в этот момент 0.5. Надо понимать границы атомарности. В том числе вызванные процессом трансляции операторов в инструкции платформы. Четкой грани может и не быть! Теоретическая и Прикладная Информатика, МФТИ 3

4 Трансляция С asm Исходный текст void myfunc(void) < int a,b,c; a=1; b=f(a); c=b; b++; >Код для x86 ; пролог mov DWORD PTR _a$[ebp], 1 ; a=1 mov eax, DWORD PTR _a$[ebp] ; b=f(a) push eax add esp, 4 mov DWORD PTR _b$[ebp], eax ; c = b mov ecx, DWORD PTR _b$[ebp] mov DWORD PTR _c$[ebp], ecx mov edx, DWORD PTR _b$[ebp] ; b++ add edx, 1 mov DWORD PTR _b$[ebp], edx ; эпилог ; оптимизированный код для той же функции push 1 ; а где же операторы С? Теоретическая и Прикладная Информатика, МФТИ 4

5 Актуальность значений Переменная ассоциирована с ячейкой памяти Операции проводятся чащще всего в регистре считали, изменили, записали С переменной ассоциировано несколько значений ячейка, регистр и тд Указатель «умеет» указывать только в память! Теоретическая и Прикладная Информатика, МФТИ 5

6 Особенности ЯВУ каждый оператор языка высокого уровня может быть протранслирован в несколько инструкций аппаратной платформы; смысловая последовательность инструкций может не соответствовать последовательности операторов языка (компилятор может переставлять смысловые действия из соображений оптимизации исполнения); одна инструкция в коде может не иметь прямого соответствия какому либо оператору языка, из которых она была получена; часто в последовательности инструкций оптимизированного кода нельзя найти границ операторов языка; одно и то же понятие может одновременно иметь разные представления, из которых только одно является актуальным, и для его использования необходимы дополнительные действия Для managed языков ситуация еще более запутана, нет прямого соответствия, и представление может меняться во времени исполнения программы (один оператор в разные моменты времени будет протранслирован по разному). Теоретическая и Прикладная Информатика, МФТИ 6

7 Условия гонки Они же конкуретный доступ к памяти из нескольких мест (потоков) Разница в семантике языка (единообразие значения переменной) и в его реализации (существование стадий операций, несколько представителей одной переменной с разной актуальностью) Теоретическая и Прикладная Информатика, МФТИ 7

8 «атомарный» a++ Поток 1 Поток 2 reg 9 Модели языков и систем Есть ли в языке предположения или гарантии относительно параллельного исполнения или порядка выполнения операторов? Модель, встроенная в язык программирования Модель, встроенная в библиотеку времени выполнения Модель, встроенная в среду языка Теоретическая и Прикладная Информатика, МФТИ 9

10 Модели языков типа С С, С++, ObjectiveC, новый стандарт С++х исключение Изначально языки этой группы разрабатывались для UP окружения и произвольной платформы В стандартах языков нет НИКАКИХ предположений про порядок, место расположения в памяти-регистре и тд, кроме собственно упорядоченности операторов Теоретическая и Прикладная Информатика, МФТИ 10

11 Особенности С. локальные переменные располагаются в стеке, который уникален для каждого потока исполнения компилятор имеет право предположить, что никто кроме исполняемого сейчас кода не будет доступаться к данным ключ volatile, который означает, что данные надо читать и писать из памяти при каждом к ним обращении Ключ volatile введен для работы с драйверами и «искуственной» памятью, доступ к которой означает IO операции (например, APIC) и необходима была гарантия обращения к памяти. Ключ volatile не имеет отношения к синхронизации Теоретическая и Прикладная Информатика, МФТИ 11

14 Особенности JAVA Вводится новое понятие монитора (для каждого объекта, по умолчанию неявный) Используется для взаимного исключения кода Synchronized включает его только один поток может вызвать метод для экземпляра Более детально информация в документации Java Теоретическая и Прикладная Информатика, МФТИ 14

15 Особенности С# Двустадийная компиляция байткод + CLR Встроенная модель памяти, аналогична monitor Только явное описание спец объект, который «можно ожидать» Защищенные участки кода lock (в стиле try/catch C++) Теоретическая и Прикладная Информатика, МФТИ 15

16 Выводы Те понятия, которыми манипулирует программист, имеют сложное «переложение» в особенности аппаратной платформы, как минимум, в нетривиальные наборы инструкций Конкурентный доступ является следствием организации компьютера и несоответствия понятий, вкладываемых программистом, с их реализацией как из за последовательности инструкций, так и из за атомарности, видимости и переупорядочения операций работы с памятью Некоторые языки имеют понятие о параллельном выполнении и модели памяти, встроенное в язык (типа JAVA), некоторые (типа С) нет Некоторые особенности реализации языков и RTL облегчают создание корректно работающих в параллельном окружении программ (модель памяти, доступ к примитивам синхронизации, локальная память типа стека, потоко-безопасные библиотеки и тд) Несмотря на наличие «модели памяти» языка и остальных особенностей, проблемы корректного исполнения кода в параллельном окружении лежат на программисте (не только синхронизация) Теоретическая и Прикладная Информатика, МФТИ 16

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *