В прошлый раз я предложил заглянуть в код MRI, чтобы разобраться с реализацией GIL и ответить на оставшиеся вопросы. Что мы сегодня и сделаем.
Черновая версия этой статьи изобиловала кусками кода на C, однако, из-за этого суть терялась в деталях. В финальной версии почти нет кода, а для любителей поковыряться в исходниках я оставил ссылки на функции, которые упоминал.
После первой части остались два вопроса:
На первый вопрос можно ответив, взглянув на реализацию, поэтому начнем с него.
Черновая версия этой статьи изобиловала кусками кода на C, однако, из-за этого суть терялась в деталях. В финальной версии почти нет кода, а для любителей поковыряться в исходниках я оставил ссылки на функции, которые упоминал.
В предыдущей серии
После первой части остались два вопроса:
- Делает ли GIL
array << nil
атомарной операцией? - Делает ли GIL код на Ruby потокобезопасным?
На первый вопрос можно ответив, взглянув на реализацию, поэтому начнем с него.