а нельзя ли один раз создать mutex, а потом его только lock/unlock?
это очень дешёвые операции, и надёжные.
сам mutex можно хранить private внутри класса
A>конечно перфоманс, стоимость инициализации/освобождения мьютекса (объекта ядра) несравнима с атомарными операциями, выполняющимися напрямую на процессоре.
pthread_mutex в uncontended ситуации реализован именно атомарными операциями и не уходит в ядро.
Здравствуйте, THESERG, Вы писали:
THE>а нельзя ли один раз создать mutex, а потом его только lock/unlock? THE>это очень дешёвые операции, и надёжные. THE>сам mutex можно хранить private внутри класса
в виндах Mutex — объект ядра. На каждый его захват и освобождение будет делаться выполнение кода контексте ядра, что гораздо медленнее выполнения Interlocked-операций.
Здравствуйте, THESERG, Вы писали:
THE>а нельзя ли один раз создать mutex, а потом его только lock/unlock? THE>это очень дешёвые операции, и надёжные. THE>сам mutex можно хранить private внутри класса
Извините, я конечно имел в виду открытие/закрытие, а не пересоздание мьютекса каждый раз заново, что лишено смысла
Про дешевизну операций я конечно же попрошу пруфлинк, от себя приведу The Cost of Mutexes
покопавшись в интернетах, я понял, что interlocked — это таки быстрее, чем mutex, но очень легко накодить какой-нибудь deadlock или что-то подобное. В общем, надо много думать...
Здравствуйте, THESERG, Вы писали:
THE>пруф или нет, но линк: http://stackoverflow.com/questions/2193435/interlock-vs-mutex-scale-up-issues
THE>покопавшись в интернетах, я понял, что interlocked — это таки быстрее, чем mutex, но очень легко накодить какой-нибудь deadlock или что-то подобное. В общем, надо много думать...
Возможно я не верно понял, но дедлок-таки легко накодить с мьютексом, а вот с инетерлоками этого сделать не удастся.
Здравствуйте, THESERG, Вы писали:
THE>SemiCoder,
THE>со всем согласен, но вот пункт 3... THE>почему mutex хуже, чем interlocked? THE>экранировать операции pop и push через scoped lock, что в этом плохого? performance? THE>и как там с exceptions в interlocked?
Здравствуйте, TheBeard, Вы писали:
TB>Здравствуйте, THESERG, Вы писали:
THE>>SemiCoder,
THE>>со всем согласен, но вот пункт 3... THE>>почему mutex хуже, чем interlocked? THE>>экранировать операции pop и push через scoped lock, что в этом плохого? performance? THE>>и как там с exceptions в interlocked?
TB>По этой теме есть пара хороших постов remark'а: "lock-, wait-, obstruction-, atomic-free algorithms"
SC>Буду рад поделиться информацией о том, Кого мы ищем в Bing.AdCenter (увидел несколько колких замечаний про strcmp и решил написать). SC>Ну во-первых, Никогда Никому не говорите (тем более на phone screen), что Вы не готовились к интервью. Я это слышу все чаще и чаще. Во-вторых, я беседовал с несколькими людьми, занимающими довольно высокие позиции в крупных отечественных компаниях, которые почему-то очень хотят претендовать на SDE(T) позиции. Господа — это Технические позиции, поэтому на всех интервью будут задавать Технические вопросы. Не хочу обсуждать тему "как же так? я ведь занимаю позицию CEO/Fellow/etc в компании XXX, почему же Вы меня спрашиваете про рекурсию?". Потому, что Вы хотите занять позицию разработчика. Вот почему. Идем дальше: нам не важно на каких языках и платформах Вы работаете или работали. Вообще не важно. Важно то, как глубоко Вы думаете и как Вы решаете проблемы. Ваш, что называется — mindset. Ну и конечно — Мотивация. Было бы здорово, если бы Вы определились — чего именно Вам хочется, прежде чем пускаться в процесс... Ну, конечно, не все так плохо!
Супер! Сразу видно опытного человека. Почитаешь РСДН так все вокруг как минимум архитекторы.. нет... Архитекторы. За пару часов подготовки — принципалы. Десять строчек кода на доске написать? Не, ну нафиг. Компания должна прогнуться, предоставить ноутбук, интернет, и не придираться к тому, что код кривой и не работает даже в стандартных ситуациях не говоря уж про граничные.
Здравствуйте, SemiCoder, Вы писали:
SC>3. Хороший пример задачи на multithreading, особенно понравится программистам C/C++: допустим, Вы написали написали собственную реализию Стека. Вас просят сделать функции Push/Pop — thread safe. 90% кандидатов начинают болтать про мьютексы. Остальные 10% понимают, что мьютекс здесь не лучший вариант, но решить задачу быстро не могут. Тогда кандидату показывают страничку в MSDN с описанием функции WINAPI — InterlockedExchange. Опытному программисту достаточно 5-10 минут, чтобы прочитать эту страничку и _применить_ ее в своем коде.
А сколько процентов из этих 10% решат ее правильно и будет отсутсвовать АВА проблема? Скорее всего — это будут люди которые в теме, которые сталкивалсь с этим вопросом, а не которые прочитали только что про InterlockedExchange.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, SemiCoder, Вы писали:
SC>>3. Хороший пример задачи на multithreading, особенно понравится программистам C/C++: допустим, Вы написали написали собственную реализию Стека. Вас просят сделать функции Push/Pop — thread safe. 90% кандидатов начинают болтать про мьютексы. Остальные 10% понимают, что мьютекс здесь не лучший вариант, но решить задачу быстро не могут. Тогда кандидату показывают страничку в MSDN с описанием функции WINAPI — InterlockedExchange. Опытному программисту достаточно 5-10 минут, чтобы прочитать эту страничку и _применить_ ее в своем коде. AJD>А сколько процентов из этих 10% решат ее правильно и будет отсутсвовать АВА проблема? Скорее всего — это будут люди которые в теме, которые сталкивалсь с этим вопросом, а не которые прочитали только что про InterlockedExchange.
Из этих 10%, самых лучших отберут в ходе Очного интервью.
Здравствуйте, hokkaido, Вы писали:
H>Супер! Сразу видно опытного человека. Почитаешь РСДН так все вокруг как минимум архитекторы.. нет... Архитекторы. За пару часов подготовки — принципалы. Десять строчек кода на доске написать? Не, ну нафиг. Компания должна прогнуться, предоставить ноутбук, интернет, и не придираться к тому, что код кривой и не работает даже в стандартных ситуациях не говоря уж про граничные.
Здравствуйте, AndrewJD, Вы писали:
AJD>Скорее всего — это будут люди которые в теме, которые сталкивалсь с этим вопросом, а не которые прочитали только что про InterlockedExchange.
, что дескать это я зазвездил и таки вопросы сильно сложные задаю и т.п.
Ну да, тут есть пара персонажей... Один в Штатах никогда не был, но лучше всех знает что из себя представляется американский средний класс; другие (тысячи их) — на доске не могут 10 строчек кода написать так чтобы не подавиться от смеха, но уже Архитекторы... На РСДНе понтоваться — это не кирпичи ворочать.
Но веселее всех тут конечно Дохтур.
__>Под "пенсионным фондом" я имею в виду всю группу налогов, которые платит работодатель при "отмывании" моей зарплаты, начиная от денег, полученных от заказчика и заканчивая моим кошельком.
с начала 2011 года (после введения новых правил налогооблажения) оф. зарплата сильно посерела и в несколько раз упала до 35К рублей — однако, я не переживаю из-за этого, даже наоборот рад, что меньше денег отдаю в пенсионный фонд,
Продолжаем верить сказкам?
И какие такие "новые правила налогообложения" мешают работодателю в 2011 списывать, хотя бы частично, взносы? Да никакие.
В смысле уменьшения налогооблагаемой базы за счет зарплатных налогов в 2011 ничего не поменялось, механизмы списания и уменьшения остались прежними.
В 2011 изменились только ставки страховых взносов (хотя для высоких зарплат все даже чуть лучше стало), но я уже объяснил, что при 38К и при 138К сумма взносов одинаковая. Все остальное осталось прежним.
На твои пенсионные взносы работодатель по-прежнему уменьшает свой единый налог (или уменьшает налогооблагаемую базу для других налогов, если на ОСНО).
Поскольку сумма взносов не изменилась, то и уменьшить работодатель базу/ед_налог может на одинаковое количество, что при 38К, что при 138К рублей в месяц.
Здравствуйте, anomander, Вы писали:
A>конечно перфоманс, стоимость инициализации/освобождения мьютекса (объекта ядра) несравнима с атомарными операциями, выполняющимися напрямую на процессоре. Даже в случае с критическими секциями, если очередь/стек используется тяжело, и идут тысячи push/pop в секунду, оверхед будет большим. A>Конечно, мьютексы — универсальное решение, но это не значит что оно оптимально. Поинтеры-то мы можем перекинуть без локов.
THE>>[skip]
Не помню точно Рихтера по этому вопросу, но, КМК, критические секции над Interlocked и реализованы .
Стоит ли выигрыш в пару тактов процессора усложнения и размазывания логики, которое возникает при использовании InterlockedCompare|Exchange в сравнении с критической секцией?