Доброго дня.
Возник вопрос: как atom, передаваемый в emysql:prepare(StmtName, Statement) первым параметром подружить с многопоточностью.
Работу с emysql обернул в отдельный модуль. Там все функции работы с БД. И там значение StmtName зафиксировал хардкодом.
Получилось так, что два процесса запускаются почти одновременно и второй успевает выполнить свой prepare() до того, как первый выполнит свой execute().
Вот теперь думаю, как бы это просто исправить.
Первая мысль — создавать уникальные StmtName для каждого процесса. Но это не подойдёт — StmtName может быть только атомом. А динамические атомы, насколько я понимаю — зло.
Вторая мысль — очередь какую-то организовать. И выделять свободные атомы. Но все выделенные атомы могут оказаться заняты.
Значит в любом случае придётся ждать освобождения. А я с erlang только начал разбираться, не знаю, как бы это сделать просто.
Или можно как-то «залочить» пару команд prepare и execute, чтоб они атомарно выполнялись? Как critical section.
Мастера, подскажите.