avva: (moose)
[personal profile] avva
Странное дело - по опыту интервьюирования в последнее время, кандидаты почти всегда хорошо знают, что такое мьютексы, семафоры и критические секции, зачем они нужны и какие есть основные предосторожности в работе с ними; но мало кто почти никто не знает, что бывает atomic increment (и другие атомарные операции) и как ими пользоваться. Я почему-то думал, что это знание примерно одного уровня и источника.

(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")

Date: 2013-02-28 03:13 pm (UTC)
From: [identity profile] gul-kiev.livejournal.com
Я, вот, живой пример (хоть и не программист). Про критические секции и мьютексы знаю, а про атомарные инструкции - нет.
Ну, то есть, в принципе знаю, что команда процессора выполняется атомарно, что можно инкрементировать переменную или поменять местами содержимое регистров одной командой на некоторых процессорах (в частности, на x86), но вот что будет, если моё "i++" будет выполняться на неведомой архитектуре с несколькими неизвестными мне процессорами, да ещё и будучи скомпилирована неизвестным мне компилятором, либо если i окажется 64-битным на 32-битной архитектуре - не знаю. Полагаю, что ничего хорошего, и ловить race condition можно будет долго. А потому лучше обвешу мьютексами от греха.
Наверное, в каких-то случаях есть какие-нибудь специальные слова для гарантии атомарности, но это частности, работающие в какой-нибудь одной среде и на одной платформе, а мьютексы - это общее, теоретическое, различается только реализация.
Примерно как можно знать области видимости и правила наследования, но не знать конкретную pragma конкретного компилятора, которая в каких-то случаях позволяет сделать более эффективный код. Можно знать, что в обработчике сигнала ничего лишнего делать не нужно, но не знать, что в большинстве современных систем оттуда менять глобальные переменные безопасно.
Это, кажется, немного разные уровни знаний - теоретический и практический.

Date: 2013-02-28 03:32 pm (UTC)
From: [identity profile] avva.livejournal.com
В 99% случаев лучше не морочить себе голову атомарными инструкциями, и обвешивать, где надо, мьютексами.

Но теоретически знать об их существовании и том, как они работают - полезно. И потому, что есть этот редкий 1%, когда такую возможность стоит принять во внимание, и потому, что это часть базового понимания, как синхронизация устроена, как сами мьютексы написаны итд.

Я, кроме того, хочу добавить - кажется, многие люди решили, будто я считаю, что кандидат обязан знать об атомарных операциях. Это не так. Если кандидат хорошо это знает и умеет пользоваться, это небольшой плюс в его пользу; если нет - это в худшем случае слабый сигнал, да и то вряд ли. Знать и уметь пользоваться мьютексами с моей точки зрения в 100 раз важнее. Просто меня удивило, что человек за человеком не знают о них - мне казалось, что это знание я приобрел примерно в то же время, когда узнал о семафорах и мьютексах, и что это типично. Наверное, это не так.

Date: 2013-02-28 07:33 pm (UTC)
From: [identity profile] suvov.livejournal.com
Недавно проходил онлайн-курс от Стенфорд cs107. Там как раз multithreading, я использовал posix (стенфордская библиотека не работала на моей системе). Так вот про atomic increments я бы тоже ничего толкового не сказал.

Date: 2013-02-28 09:22 pm (UTC)
From: [identity profile] migmit.livejournal.com
Неужели они и про лок-фри структуры не слышали?

January 2026

S M T W T F S
    1 2 3
4 5 6 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 8th, 2026 07:36 am
Powered by Dreamwidth Studios