История изменений
Исправление KivApple, (текущая версия) :
Мне важно захватить mutex элемента до отпускания mutex таблицы. Зачем? Потому что на самом деле это конкурентная структура воксельного мира, хранящая чанки. И помимо операции блокировки одного чанка, будет ещё операция блокировки группы чанков 3х3х3 (для многих операций важны соседи). И если не гарантировать, что все захваты чанков будут сериализованы одним mutex, то легко устроить deadlock (один тред захватил одну часть чанков, другой другую и оба ждут друг друга до тепловой смерти вселенной). А вот после всех блокировок можно спокойно работать конкурентно.
Кстати, это накладывает ограничение, что если захватил чанк, то пока не отпустишь, новые захватывать нельзя в том же потоке. Было бы круто сделать эту гарантию тоже средствами rust.
Исправление KivApple, :
Мне важно захватить mutex элемента до отпускания mutex таблицы. Зачем? Потому что на самом деле это конкурентная структура воксельного мира, хранящая чанки. И помимо операции блокировки одного чанка, будет ещё операция блокировки группы чанков 3х3х3 (для многих операций важны соседи). И если не гарантировать, что все захваты чанков будут сериализованы одним mutex, то легко устроить deadlock (один тред захватил одну часть чанков, другой другую и оба ждут друг друга).
Кстати, это накладывает ограничение, что если захватил чанк, то пока не отпустишь, новые захватывать нельзя в том же потоке. Было бы круто сделать эту гарантию тоже средствами rust.
Исходная версия KivApple, :
Мне важно захватить mutex элемента до отпускания mutex таблицы. Зачем? Потому что на самом деле это конкурентная структура воксельного мира, хранящая чанки. И помимо операции блокировки одного чанка, будет ещё операция блокировки группы чанков 3х3х3. И если не гарантировать, что все захваты чанков будут сериализованы одним mutex, то легко устроить deadlock (один тред захватил одну часть чанков, другой другую и оба ждут друг друга).
Кстати, это накладывает ограничение, что если захватил чанк, то пока не отпустишь, новые захватывать нельзя в том же потоке. Было бы круто сделать эту гарантию тоже средствами rust.