diff --git a/.obsidian/plugins/home-tab/data.json b/.obsidian/plugins/home-tab/data.json index a7309d78..57494abb 100644 --- a/.obsidian/plugins/home-tab/data.json +++ b/.obsidian/plugins/home-tab/data.json @@ -23,6 +23,14 @@ "markdownOnly": false, "unresolvedLinks": false, "recentFilesStore": [ + { + "filepath": "_inbox/Блокировки.md", + "timestamp": 1718901746928 + }, + { + "filepath": "_inbox/Deadlock.md", + "timestamp": 1718901738130 + }, { "filepath": "_inbox/Two Phase Lock.md", "timestamp": 1718901445162 @@ -34,14 +42,6 @@ { "filepath": "_inbox/Транзакция БД.md", "timestamp": 1718901431282 - }, - { - "filepath": "knowledge/dev/database/Свойства транзакции БД (ACID).md", - "timestamp": 1718901429992 - }, - { - "filepath": "_inbox/Basically Available Soft state Eventual consistency.md", - "timestamp": 1718901056216 } ], "bookmarkedFileStore": [], diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index ccc2d287..85f258c0 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,5 +1,13 @@ { "recentFiles": [ + { + "basename": "Блокировки", + "path": "_inbox/Блокировки.md" + }, + { + "basename": "Deadlock", + "path": "_inbox/Deadlock.md" + }, { "basename": "Two Phase Lock", "path": "_inbox/Two Phase Lock.md" @@ -20,10 +28,6 @@ "basename": "Basically Available Soft state Eventual consistency", "path": "_inbox/Basically Available Soft state Eventual consistency.md" }, - { - "basename": "Блокировки", - "path": "_inbox/Блокировки.md" - }, { "basename": "Журналы в MySQL", "path": "_inbox/Журналы в MySQL.md" @@ -195,10 +199,6 @@ { "basename": "Least Recently Used", "path": "_inbox/Least Recently Used.md" - }, - { - "basename": "Most Recently Used", - "path": "_inbox/Most Recently Used.md" } ], "omittedPaths": [], diff --git a/_inbox/Deadlock.md b/_inbox/Deadlock.md new file mode 100644 index 00000000..cedd85d7 --- /dev/null +++ b/_inbox/Deadlock.md @@ -0,0 +1,11 @@ +--- +aliases: +tags: + - зрелость/🌱 +date: + - - 2024-06-20 +zero-link: + - "[[00 Разработка]]" +parents: +linked: +--- diff --git a/_inbox/Two Phase Lock.md b/_inbox/Two Phase Lock.md index 2d77f588..8685e173 100644 --- a/_inbox/Two Phase Lock.md +++ b/_inbox/Two Phase Lock.md @@ -14,4 +14,19 @@ linked: Блокировка на запись в том числе блокирует на чтение. Первая фаза: установка блокировки -Вт \ No newline at end of file +Вторая фаза: снятие + +Хотим изменить данные: +- ставим блокировку на запись +- ждем, пока все блокировки, которые были установлены до нашей, будут сняты +- меняем запись +- снимаем блокировку + +Хотим прочитать строчку: +- Ставим блокировку на чтение +- Ждем пока все блокировки ==на запись==, которые были установлены до нашей, будут сняты. +- Считываем запись +- Снимаем блокировку + +## Дополнительные материалы +- [Two-phase locking - Wikipedia](https://en.wikipedia.org/wiki/Two-phase_locking) \ No newline at end of file diff --git a/_inbox/Блокировки.md b/_inbox/Блокировки.md index e3292fbd..141f1f06 100644 --- a/_inbox/Блокировки.md +++ b/_inbox/Блокировки.md @@ -11,6 +11,8 @@ linked: --- Блокировки в разработке, особенно в контексте многопоточности и баз данных, относятся к механизмам, предотвращающим одновременный доступ к ресурсу несколькими потоками или процессами, чтобы избежать несогласованности данных или других конфликтов. +При использовании блокировок есть риск получить [Deadlock](Deadlock.md). + - **Мьютексы (Mutexes)**: - **Назначение**: Обеспечивают эксклюзивный доступ к ресурсу. Когда поток захватывает мьютекс, другие потоки должны ждать, пока он освободится. - **Применение**: В многопоточных приложениях для синхронизации доступа к общим данным.