با استفاده از تابع GET_LOCK در MySQL یک کوئری بنویسید که قفل نامگذاریشده 'my_resource' را با تایماوت 10 ثانیه بگیرد، در صورت موفقیت پیام 'LOCK_ACQUIRED' برگرداند و سپس قفل را با RELEASE_LOCK آزاد کند.
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:08 0.0
با استفاده از SELECT GET_LOCK('my_resource', 10) میتوانید تلاش برای گرفتن قفل نامگذاریشده را انجام دهید — مقدار 1 یعنی موفقیت، 0 یعنی تایماوت و NULL یعنی خطا. برای این سوال از کلاینت MySQL یا یک اسکریپت ساده استفاده کنید: ابتدا GET_LOCK را فراخوانی و مقدار بازگشتی را بررسی کنید، در صورت برابر بودن با 1 یک SELECT برای نمایش 'LOCK_ACQUIRED' اجرا کنید و در نهایت با SELECT RELEASE_LOCK('my_resource') قفل را آزاد کنید. نکته: قفلهای نامگذاریشده وابسته به کانکشن هستند و با بستهشدن کانکشن هم آزاد میشوند، پس بررسی مقدار بازگشتی اهمیت دارد.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
قفلهای نامگذاریشده به کانکشن وابستهاند و با بسته شدن کانکشن آزاد میشوند، پس در کد از بلوکهای cleanup استفاده کنید تا RELEASE_LOCK همواره انجام شود. مقدار برگشتی GET_LOCK را بررسی کنید: 1 یعنی موفق، 0 تایماوت، NULL خطا. در صورت موفقیت، پیام 'LOCK_ACQUIRED' را نمایش داده و سپس حتماً قفل را با RELEASE_LOCK آزاد کنید تا از بروز deadlock جلوگیری شود.
گزارش