LINUX.ORG.RU

пара вопросов синхронизация тредов и gengetopt


0

0

1) есть демон в котором работа происходит в большой петле с разными проверками... возникла необходимость добавить новый функционал что-бы на лету мнять даные не перезапуская самого демона, например открыть другой конфигурационный файл и юзать параметры из него. т.е. мне нужно будет определить какие участки проверок в петле будет заменены новыми данными из конфига и использовать уже их. для этого думаю открывать и читать данные в отдельном потоке, что-бы не тормозить рабочий, это наверно в сторону mutex? но он вроде блокирует или нет? и получится ли новые настройки юзать в главном треде, а читать только в новом(когда возникает момент реконфигуринга...)

2) кто-нибуть юзал сеё поделье?
http://sourceforge.net/projects/ggoeclipse/
если у кого-то работает, скажите версию eclips'a, а то у меня только пишет... у меня в последней, та что для с/c++(самая мелкая) вот то выводит
если "Container" пустой
File container must be specified
или с путем к ggo
File container must exist


1) Если я правильно понял вашу мудреную формулировку, то нужно из одного треда (вспомогательного) изменить поведение другого (основного). В таком случае нужно использовать объекты синхронизации (например мутексы, как вы сказали). Мутексом создается две критические секции: в вспомогательном треде - изменение флагов, в главном - условия, в которых эти флаги проверяются. Второе возможно выльется в заключение в крит.секцию всего тела основного цикла.

В итоге будет гарантировано, что основной тред не будет работать с недоустановленными флагами и частично измененными наборами флагов.

staseg ★★★★★
()
Ответ на: комментарий от staseg

ЗЫ. За "критическую секцию" не пинать, привычка с венды:).

staseg ★★★★★
()

Ты что-то сложное городишь. Читай конфиг по SIGHUP в основном потоке без всяких блокировок. Работать будет мгновенно, если у тебя конечно не многомегабайтный конфиг.

Reset ★★★★★
()
Ответ на: комментарий от staseg

А если надо перелить данные из одного потока в другой, то опять мютексы и блокировки это слишком сложно, гораздо проще использовать pipe при этом никаких блокировок не понадобится.

Reset ★★★★★
()
Ответ на: комментарий от Reset

не, с пайпами я меньше всего хочу связываться, еще думал над eventpoll'ом
нашел пример...
http://en.wikipedia.org/wiki/POSIX_Threads
но это что-то не то, т.е. пока печатается a, не печатается b, а как сразу оба из разных тредов?
b
a
b
a
a
b
b
a
b
a
b
a
b
a
b
a

syn
() автор топика
Ответ на: комментарий от Reset

> А чем pipe не устраивает?

Тогда уж процессы форкать. У потоков преимущество в том, что можно обмениваться данными почти без оверхеда. Зачастую даже фактически получается и вовсе без оверхеда.

const86 ★★★★★
()
Ответ на: комментарий от const86

форк- это уже старомодно, поэтому юзаю его толко что-бы в бэкграунд засунуть процесс.
А что быстрее рабоатет mutex или pipe?
в общем определился, решис лделать через mutex.
к стати еще есть poll, его вроде еще проще юзать. или poll тут не к месту?

syn
() автор топика
Ответ на: комментарий от syn

> форк- это уже старомодно, поэтому юзаю его толко что-бы в бэкграунд засунуть процесс.

Это не старомодно, просто это тяжелее, чем потоки.

> А что быстрее рабоатет mutex или pipe?

Буквоеды сожрут за такой вопрос. Мутексы быстрее, а спинлоки ещё быстрее, с известными ограничениями.

> к стати еще есть poll, его вроде еще проще юзать. или poll тут не к месту?

Полл к пайпам имеет отношение.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.