История изменений
Исправление alysnix, (текущая версия) :
Ведь отдельная блокировка на каждую вилку быстро приводит вас к дедлокам.
похоже эксперт по многопоточности никогда не видал таймаут у мьютексов. а если и видал, то не понял зачем он.
дедлок - это несерьезно. это надуманная проблема, возникающая только при условиях если два или более потока, пытаются иметь залокнутыми собою два или более мьютекса. причем делают это в неверном порядке.
и это проблема порядка следования неких выражений в некоем коде. то есть - алгоритмическая ошибка, не имеющая отношения к мьютексам и многопотоку. это все равно что писать в файл, еще его не открыв. или рисовать на экране нечто, не стерев предыдущее изображение.
то есть дедлок разруливается просто некоторой иерархией операций, или их порядком… так же как сначала надо стереть экран, потом на нем рисовать нечто новое, а не наоборот.
так что. запомните простое правило. никаких принципиальных дедлоков не существует! дедлок это модельный пример, корни которого не имеют отношения к многопотоку вообще.
опять же таймаут на обьектах синхронизации для того и сделан, чтобы в частности, разрулить дедлок(верней обнаружить его и устранить), который нарисовал себе неумелый погромист-многопоточник.
Исходная версия alysnix, :
Ведь отдельная блокировка на каждую вилку быстро приводит вас к дедлокам.
похоже эксперт по многопоточности никогда не видал таймаут у мьютексов. а если и видал, то не понял зачем он.
дедлок - это несерьезно. это надуманная проблема, возникающая только при условиях если два или более потока, пытаются иметь залокнутыми собою два или более мьютекса. причем делают это в неверном порядке.
и это проблема порядка следования неких выражений в некоем коде. то есть - алгоритмическая ошибка, не имеющая отношения к мьютексам и многопотоку. это все равно что писать в файл, еще его не открыв. или рисовать на экране нечто, не стерев предыдущее изображение.
то есть дедлок разруливается просто некоторой иерархией операций, или их порядком… так же как сначала надо стереть экран, потом на нем рисовать нечто новое, а не наоборот.
так что. запомните простое правило. никаких принципиальных дедлоков не существует! дедлок это модельный пример, корни которого не имеют отношения к многопотоку вообще.
опять же таймаут на обьектах синхронизации для того и существует, чтобы в частности, разрулить дедлок(верней обнаружить его и устранить), который нарисовал себе неумелый погромист-многопоточник.