LINUX.ORG.RU

Организация блокировок между инстансами классов

 , ,


0

2

Есть программа на с++

Главный класс - управляющий

class Alicorn {}

Рабочие классы выполняющие задания в потоках, унаследованные от одного абстрактного класса.

class EarthPony: Pony {}
class PegasusPony: Pony {}
class UnicornPony: Pony {}

Все рабочие выполняют операции с MySQL: чтения либо записи. Запись само собой идёт через транзакцию, в случае неудачи откат, в случае успеха - подтверждения. Каждый тред соединяется к MySQL через свое соединение.

А теперь глупые вопросы:

1) нужно ли делать синхронизацию (multiple reads/one write) или это MySQL сам нормально всё разрулит?

2) Как boost::shared_mutex делить между классами, если рабочие классы не имеют связи с управляющем?

★★★★★

Последнее исправление: fornlr (всего исправлений: 2)

Каждый тред соединяется к MySQL через свое соединение.

А это оно так зачем?

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

Первый поток делает длинное и долгое вычитывание данных, курсор медленно ползет по строчкам. Открывает сначала один курсор и пишет по строчкам в файл, потом второй курсор и пишет по строчкам в файл.

SELECT * FROM data_table WHERE type=1;

SELECT * FROM data_table WHERE type=2;

Второй поток делает во ремя середины работы первого:

DELETE from data_table; COMMIT;

Операция удаления во втором потоке пришла на момент времени, когда первый поток шёл по первому запросу. И чего будет?

fornlr ★★★★★
() автор топика
Последнее исправление: fornlr (всего исправлений: 7)
Ответ на: комментарий от fornlr

Перед тем, как проектировать клиента, нужно понимать, как работает сервер. Почитай в туториалах/манах/примерах, как такие задачи вообще правильно решаются.

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

Isolation

Во. Пример того, когда одно слово по ценности как весь тред :D

Хотя получается, что реализация транзакций для процедур на чисто чтение будет дороже по ресурсам со стороны сервера, чем блокировка их в приложении.

fornlr ★★★★★
() автор топика
Последнее исправление: fornlr (всего исправлений: 1)
class EarthPony: Pony {}

А с какой целью ты всем сказал, что класс EarthPony внутри реализации использует какой-то Pony?

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