Название: Мутексы: в чем сила, брат? Отправлено: Racheengel от Сентябрь 15, 2007, 23:49 Собственно, интересует целесообразность данной конструкции (в Qt)
Название: Re: Мутексы: в чем сила, брат? Отправлено: Tonal от Сентябрь 16, 2007, 09:03 Мутексы - один из базовых примитивов синхронизации.
Любая библиотека поддерживающая многопоточность должна предоставлять набор таких примитивов либо поираться на системные. Так что, если не используешь потоки - то и мутексы тебе не нужны. Если используешь - без них никуда. ;-) Вот здесь очень доходчиво: http://tula.bofh.ru/articles/184 Название: Re: Мутексы: в чем сила, брат? Отправлено: Gryz от Сентябрь 17, 2007, 11:45 Собственно, интересует целесообразность данной конструкции (в Qt) А альтернативы?Название: Re: Мутексы: в чем сила, брат? Отправлено: Dodge от Сентябрь 17, 2007, 12:18 Собсна сила в удобстве.
Вот примеры из мануалов Qt4.3: Класс QMutex Код: int complexFunction(int flag) И мега удобный класс QMutexLocker Код: int complexFunction(int flag) Вопросы есть? ;) З.Ы. ??? Смысл опроса вообще не понятен... Название: Re: Мутексы: в чем сила, брат? Отправлено: Racheengel от Сентябрь 17, 2007, 12:25 Да надо было как то сделать программу с тредами.
Спросил вот у знакомых программеров недавно - чем они пользуются для подобного? Оказалось, что половина народу вообще про мутексы даже не слышала... Юзают статические локи. Название: Re: Мутексы: в чем сила, брат? Отправлено: Gryz от Сентябрь 17, 2007, 12:32 Да надо было как то сделать программу с тредами. Т.е. например статический int? это зло. не гарантируется атомарность операций блокировки и проверки блокировки. С большой вероятностью будет работать, но...Спросил вот у знакомых программеров недавно - чем они пользуются для подобного? Оказалось, что половина народу вообще про мутексы даже не слышала... Юзают статические локи. Название: Re: Мутексы: в чем сила, брат? Отправлено: Tonal от Сентябрь 17, 2007, 13:13 Спросил вот у знакомых программеров недавно - чем они пользуются для подобного? Дикие люди, дети гор... (с)Оказалось, что половина народу вообще про мутексы даже не слышала... Юзают статические локи. А что такое "статические локи"? Если обычная статическая переменная, то даже на однопроцессорной машине вполне просто нарваться на неприятности. Вот примитивный код: Код: //C++ Стратегия облома: 1) Первый поток проверяет условие - истина. 2) Система переключается на второй поток 3) Второй поток проверяет условие - истина. 4) оба потока одновременно выполняют код в "защищённой" области. Если if (!lock) заменить на mutex.lock(), или ещё лучше, на QMutexLocker (как писал Dodge) система гарантирует что блок будет выполнятся только в одном треде. Название: Re: Мутексы: в чем сила, брат? Отправлено: vaprele07 от Сентябрь 17, 2007, 13:24 близко:
Цитировать Брюс Эккель признался в бессилии (http://www.linux.org.ru/jump-message.jsp?msgid=2146381) Я первый признаЮсь, что не смогу написать корректную мультипоточную программу ни на C++, ни на Java, несмотря на годы, которые я провел, обучая тысячи людей этим языкам программирования. Это за пределами моих возможностей. Что уж говорить об "обычных программистах на C++"? Название: Re: Мутексы: в чем сила, брат? Отправлено: fightcat от Сентябрь 17, 2007, 15:23 Присоединяюсь к общему мнению - без них - никуда :)
Мьютексы - аттрибут не библиотеки, а стиля программирования. Если код ориентирован на многопоточность, то мьютексы необходимы, а следовательно какой бы библиотекой Вы не пользовались, придется либо брать реализацию мьютексов этой библиотеки, либо пользоваться нативными, либо, для маньяков, писать свои :) Название: Re: Мутексы: в чем сила, брат? Отправлено: Deiv от Сентябрь 17, 2007, 15:44 Да, при мультитредовой программе где треды работают с общими блоками данных без них никуда.
Иначе сегфолта или каши в данных тебе не избежать, к сожалению выяснено на собственном опыте. Правда писал без qt, просто на плюсах. Название: Re: Мутексы: в чем сила, брат? Отправлено: ритт от Сентябрь 18, 2007, 02:33 мутексы - это хорошо :)
если кто не знает, есть замечательный проект qtconcurrent, позволяющий совсем ленивым и невнимательным писать качественные многонитевые приложения, даже понятия не имея о мутексах например: Код: QImage scaled(const QImage &image) разработчики обещают, что qtconcurrent в обозримом будущем войдёт в стабильную ветку Qt зы: брюсу эккелю пригодилось бы! |