Прошу простить, что опять поминаю SObjectizer в блоге, но что поделать, к хорошему инструменту быстро привыкаешь и вокруг все воспринимается как гвозди начинаешь испытывать сложности, когда этого инструмента в твоих руках нет.
Давеча пришлось разбираться с кодом, который написан на голых нитях и мьютексах. Точнее даже на одном мьютексе...
В общем, есть объекты A, B и C. У объекта B есть мьютекс, который объект B использует совместно с объектами A и C. При этом объект C является подчиненным для B, т.е. B инициирует создание C и должен среагировать на исчезновение C.
У объектов B и C есть ссылка на объект A. У объекта A есть ссылки на B и C. Объекты A и C дергают методы друг друга. Объект A создает и уничтожает объект B.
И все эти объекты живут на разных нитях.
Вроде бы не должно быть сложно: всего три объекта, всего три нити, всего один мьютекс.
Но блин, у меня ушло несколько часов, чтобы вкурить эту кухню.
И то, спустя несколько дней копания в коде я все равно вынужден перепроверять себя, т.к. не уверен что в конкретном месте кода можно обойтись без захвата мьютекса (или, напротив, что захват мьютекса нужен). Бррр... 😉
Хотя, конечно, всегда есть шанс, что это я просто уже совсем старенький, мозги уже не те 🙁