LINUX.ORG.RU

История изменений

Исправление 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.