Згідно з Вікіпедією,
Спільні блоки іноді називають "блоками читання", а ексклюзивні - іноді називаються "блокування запису".
Чи можете ви пояснити міркування за термінами "спільний" та "ексклюзивний"?
Згідно з Вікіпедією,
Спільні блоки іноді називають "блоками читання", а ексклюзивні - іноді називаються "блокування запису".
Чи можете ви пояснити міркування за термінами "спільний" та "ексклюзивний"?
Відповіді:
Я записав цю відповідь, тому що думав, що це буде весела (і придатна) аналогія:
Подумайте про предмет, який може бути зафіксований, як дошку (замикається) у класі класу, що містить вчителя (письменника) та багатьох учнів (читачів).
Поки вчитель щось пише (ексклюзивний замок) на дошці:
Ніхто не може її прочитати, тому що вона все ще пишеться, і вона блокує ваш погляд => Якщо об'єкт виключно заблокований, спільні блокування неможливо отримати .
Інші викладачі не підходять і не почнуть писати або дошка стає нечитабельною і бентежить учнів => Якщо об'єкт виключно заблокований, інших ексклюзивних замків неможливо отримати .
Коли учні читають (ділиться замками), що знаходиться на дошці:
Всі вони можуть разом прочитати, що на ньому, => Кілька спільних блокувань можуть співіснувати .
Вчитель чекає, коли вони закінчать читати, перш ніж вона очистить дошку, щоб написати більше => Якщо один або декілька спільних замків вже існують, ексклюзивні блокування неможливо отримати .
lock()
дзвінки після перший повернеться негайно та успішно. тобто ви можете успішно заблокувати щось, що вже маєте.
writer
надається перевагу, ніж читачі, які чекають, коли блокування вибере, хто отримає замок наступного (коли його розблокує його поточний власник). Йдеться про політику .
Це досить просто. Блокування читання також відоме як спільні блокування, оскільки одночасно може читати більше одного процесу. Суть блокування читання полягає у запобіганні придбання блокування запису іншим процесом. Навпаки, блокування запису гальмує всі інші операції, поки операція запису завершена, тому її описують як ексклюзивну.
Таким чином, блокування читання говорить "ви можете читати зараз, але якщо ви хочете написати, вам доведеться почекати", тоді як блокування запису говорить "вам доведеться почекати".
Я усвідомлюю, що ти займаєшся дослідженнями на підтримку своїх досліджень, але я не можу встояти перед бажанням читати лекції.
Некомпетентне використання блокування є головною причиною головних болів. Використання системи блокування, яка відрізняє блокування читання та запису - це гарний початок, але ретельна конструкція іноді може усунути значну частину потреби блокування. Наприклад, стан сеансу ніколи не повинен зберігатися в одній глобальній колекції за кожним елементом стану.
Я фактично бачив це зроблено. Це жорстокий дизайн, що спричиняє бокс та зміну колекції за кожну останню зміну стану сеансу, що тягне за собою тривалий блокування запису. Накладні витрати були калічними, що фактично зводило сервер до однопоточної поведінки.
Просто об'єднання всього стану сеансу в структуру було величезним покращенням. Зміни стану сесії просто змінили значення членів структури сесії. Оскільки жоден інший сеанс не мав приводу і навіть можливості безпосередньо посилатися на стан сеансу, єдиний збірник, який оновлювався, був списком сеансів. Як результат, блокування було абсолютно непотрібним під час сесії, лише на початку та в кінці, а пропускна здатність зросла на фактор 3000.
Інший поширений сценарій блокування - це ресурси, що поділяються між потоками користувацької програми. Більшість сучасних фреймворків вирішують це за допомогою повідомлень, а не блокування; при "переході до потоку користувальницького інтерфейсу" ви фактично ставите в чергу чергове повідомлення, що містить покажчик функції та деякі параметри (або делегат та кадр стека залежно від реалізації).
Ексклюзивний або блокування запису надає процесу ексклюзивний доступ для запису до зазначеної частини файлу. Поки відбувається блокування запису, жоден інший процес не може заблокувати цю частину файлу.
Блокування спільного доступу чи читання забороняє будь-якому іншому процесу вимагати блокування запису у зазначеній частині файлу. Однак інші процеси можуть вимагати блокування читання.
Більше про це: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html
Принцип ж на базі даних. Відповідно до документації Oracle
Режим ексклюзивного блокування запобігає спільному доступу до пов'язаного ресурсу. Цей режим блокування отримується для зміни даних. Перша транзакція виключно для блокування ресурсу - це єдина транзакція, яка може змінювати ресурс до виходу ексклюзивного блокування.
Режим блокування спільного доступу дозволяє поділитися пов'язаним ресурсом залежно від операцій, що займаються. Кілька користувачів, які читають дані, можуть обмінюватися даними, тримаючи блокування доступу, щоб запобігти одночасному доступу письменника (якому потрібен ексклюзивний замок). Кілька транзакцій можуть
придбати блокування акцій на одному ресурсі.