о синхронизации
Feb. 28th, 2013 11:21 amСтранное дело - по опыту интервьюирования в последнее время, кандидаты почти всегда хорошо знают, что такое мьютексы, семафоры и критические секции, зачем они нужны и какие есть основные предосторожности в работе с ними; но мало кто почти никто не знает, что бывает atomic increment (и другие атомарные операции) и как ими пользоваться. Я почему-то думал, что это знание примерно одного уровня и источника.
(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")
(точнее, фразу atomic increment знают, но думают, например, что это работает "через мьютексы" или "с помощью OS")
no subject
Date: 2013-02-28 03:13 pm (UTC)Ну, то есть, в принципе знаю, что команда процессора выполняется атомарно, что можно инкрементировать переменную или поменять местами содержимое регистров одной командой на некоторых процессорах (в частности, на x86), но вот что будет, если моё "i++" будет выполняться на неведомой архитектуре с несколькими неизвестными мне процессорами, да ещё и будучи скомпилирована неизвестным мне компилятором, либо если i окажется 64-битным на 32-битной архитектуре - не знаю. Полагаю, что ничего хорошего, и ловить race condition можно будет долго. А потому лучше обвешу мьютексами от греха.
Наверное, в каких-то случаях есть какие-нибудь специальные слова для гарантии атомарности, но это частности, работающие в какой-нибудь одной среде и на одной платформе, а мьютексы - это общее, теоретическое, различается только реализация.
Примерно как можно знать области видимости и правила наследования, но не знать конкретную pragma конкретного компилятора, которая в каких-то случаях позволяет сделать более эффективный код. Можно знать, что в обработчике сигнала ничего лишнего делать не нужно, но не знать, что в большинстве современных систем оттуда менять глобальные переменные безопасно.
Это, кажется, немного разные уровни знаний - теоретический и практический.
no subject
Date: 2013-02-28 03:32 pm (UTC)Но теоретически знать об их существовании и том, как они работают - полезно. И потому, что есть этот редкий 1%, когда такую возможность стоит принять во внимание, и потому, что это часть базового понимания, как синхронизация устроена, как сами мьютексы написаны итд.
Я, кроме того, хочу добавить - кажется, многие люди решили, будто я считаю, что кандидат обязан знать об атомарных операциях. Это не так. Если кандидат хорошо это знает и умеет пользоваться, это небольшой плюс в его пользу; если нет - это в худшем случае слабый сигнал, да и то вряд ли. Знать и уметь пользоваться мьютексами с моей точки зрения в 100 раз важнее. Просто меня удивило, что человек за человеком не знают о них - мне казалось, что это знание я приобрел примерно в то же время, когда узнал о семафорах и мьютексах, и что это типично. Наверное, это не так.
no subject
Date: 2013-02-28 07:33 pm (UTC)no subject
Date: 2013-02-28 09:22 pm (UTC)