@Boris19

Как разобраться какая операция атомарна?

Вот например, операция list.append(x) - является атомарной, как это понять по байткоду питона?

>>> def k():
...     l = []
...     l.append(10)
...
>>> dis(k)
  2           0 BUILD_LIST               0
              2 STORE_FAST               0 (l)

  3           4 LOAD_FAST                0 (l)
              6 LOAD_ATTR                0 (append)
              8 LOAD_CONST               1 (10)
             10 CALL_FUNCTION            1
             12 POP_TOP
             14 LOAD_CONST               0 (None)
             16 RETURN_VALUE


Вот я вижу тут 3 инструкции:
4 LOAD_FAST 0 (l)
6 LOAD_ATTR 0 (append)
8 LOAD_CONST 1 (10)

Так почему эта инструкция является атомарной?
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
@Boris19 Автор вопроса
В общем разобрался без помощи сообщества!
Оказалось все просто, инструкции LOAD_FAST, LOAD_ATTR, LOAD_CONST просто загружают ссылки на нужные объекты и только инструкция CALL_FUNCTION изменяет данные - поэтому вся операция является атомарной.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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