یک تصور اشتباه متداول درمورد قفل read و write در برنامه نویسی

در ارتباط با استفاده از قفل در برنامه نویسی (بخصوص برنامه نویسی وب و دیتابیس) که قبلا مطالبی داده بودم:
http://www.hamidreza-mz2.tk/?p=555
http://www.hamidreza-mz2.tk/?p=560
http://www.hamidreza-mz2.tk/?p=940

این موضوع رو تازگی کسی ازم پرسید و جواب بهش دادم، گفتم تصور اشتباه متداولی هست و بهتره توی وبلاگم درجش کنم.

یک برداشت اشتباه متداولی که درمورد قفل read و write صورت میگیره (که خود من هم قبلا دچارش شده بودم) اینه که اینطور بنظر میرسه که منظور از قفل write اینه که درخواستهای write بلاک میشن و درخواستهای read آزاد هستن که عمل کنن. درحالیکه منظور این نیست و منظور رو باید به این شکل نگاه کرد که با گرفتن قفل write شما دارید میگید میخوام بنویسم، یعنی منظور اینه که شما دارید میگید برای نوشتن دارم قفلش میکنم، نه اینکه میخوام فقط جلوی درخواستهای نوشتن رو بگیرم. با گرفتن قفل write شما باعث میشید که هم جلوی write و هم جلوی read گرفته بشه، که این در منابع آمده بگردید بخونید پیدا میکنید و میتونید تست هم بکنید.

همینطور قفل read هم به این معنا نیست که میخواید جلوی درخواستهای read رو بگیرید، بلکه دارید میگید میخوام بخونم (و طبیعتا در این مدت دیتا نباید دست کاری بشه). پس درواقع قفل read جلوی خواندن همزمان بقیه رو نمیگیره و درخواستهای read دیگری میتونن روی رکورد یا جدول قفل شده اجرا بشن، اما جلوی درخواستهای write گرفته میشه. به همین خاطر (امکان اجرای همزمان چند درخواست برای خواندن) هست که اسم دیگر قفل read همون shared lock (قفل اشتراکی) است، البته احتمالا چون همزمان چند پراسس میتونن قفل read روی جدول یا رکوردهای مشترکی رو بگیرن و داشته باشن (و در این زمان فقط درخواستهای write و درخواستها برای قفل های write هستن که بلاک میشن).

خلاصه اسم این قفل ها یک مقدار گول میزنه و منحرف میکنه فکر رو.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>