Информация об изменениях

Сообщение Re[4]: mutex for child-threads? от 08.12.2016 0:09

Изменено 08.12.2016 8:40 turbocode

К>Что до внутренних и внешних потоков, — то напрашивается ввести два мьютекса.
К>Один лочится главным потоком и защищает публичные данные от посторонних.
К>Второй лочится главным и дочерними и предназначен для синхронизации доступа к потрохам.
Пример кода?

К>Тем не менее, сама идея лочить данные надолго — это предпосылка к лётным происшествиям.

К>Нельзя ли как-то переделать программу, чтобы мьютексы защищали только критические секции, а не вообще всё сразу?
Данные хорошо разделены, поэтому коллизий не так уж и много судя по Concurrency Visualizer.

К>И переделать обмен данными между внешними потоками — вместо прямого доступа к общим данным, придумать какие-то очереди сообщений, почтовые ящики?

Нельзя. Это убьет перформанс в ноль.
Re[4]: mutex for child-threads?
К>Что до внутренних и внешних потоков, — то напрашивается ввести два мьютекса.
К>Один лочится главным потоком и защищает публичные данные от посторонних.
К>Второй лочится главным и дочерними и предназначен для синхронизации доступа к потрохам.
Пример кода? Проблема в том что нельзя разделить на потроха и не потроха (то есть внутренний поток может вызвать у себя вполне полноценную внешнюю функцию)

К>Тем не менее, сама идея лочить данные надолго — это предпосылка к лётным происшествиям.

К>Нельзя ли как-то переделать программу, чтобы мьютексы защищали только критические секции, а не вообще всё сразу?
Данные хорошо разделены, поэтому коллизий не так уж и много судя по Concurrency Visualizer.

К>И переделать обмен данными между внешними потоками — вместо прямого доступа к общим данным, придумать какие-то очереди сообщений, почтовые ящики?

Нельзя. Это убьет перформанс в ноль.