пятница, 21 июля 2023 г.

[prog.c++] Тяжко это, разбираться с голой многопоточностью без SObjectizer-а

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

Давеча пришлось разбираться с кодом, который написан на голых нитях и мьютексах. Точнее даже на одном мьютексе...

В общем, есть объекты A, B и C. У объекта B есть мьютекс, который объект B использует совместно с объектами A и C. При этом объект C является подчиненным для B, т.е. B инициирует создание C и должен среагировать на исчезновение C.

У объектов B и C есть ссылка на объект A. У объекта A есть ссылки на B и C. Объекты A и C дергают методы друг друга. Объект A создает и уничтожает объект B.

И все эти объекты живут на разных нитях.

Вроде бы не должно быть сложно: всего три объекта, всего три нити, всего один мьютекс.

Но блин, у меня ушло несколько часов, чтобы вкурить эту кухню.

И то, спустя несколько дней копания в коде я все равно вынужден перепроверять себя, т.к. не уверен что в конкретном месте кода можно обойтись без захвата мьютекса (или, напротив, что захват мьютекса нужен). Бррр... 😉

Хотя, конечно, всегда есть шанс, что это я просто уже совсем старенький, мозги уже не те 🙁

Комментариев нет: