How To: Non-Blocking Semaphore Access in PHP كيف ل: عدم عرقلة وصول عمود الاشارة في بي. اتش. بى
Semaphore is used to restrict access to shared resources, such as shared memory or to limit the number of processes that may simultaneously use a resource, in a multi-process or multi-threaded environment. عمود الاشارة تستخدم لتقييد الوصول الى الموارد المشتركة ، مثل الذاكرة المشتركة او على الحد من عدد العمليات التي يمكن ان تستخدم الموارد في وقت واحد ، في عملية متعدد او متعدد مخيط البيئة.
In php using semaphore a process must wait while accessing a shared resource currently used by another process. بي. اتش. بى باستخدام عمود الاشارة في عملية يجب الانتظار لحين الحصول على مورد مشترك المستخدمة حاليا من قبل عملية اخرى. But this may not be required for all cases. ولكن هذا قد لا يكون مطلوبا لجميع الحالات. Sometimes we need to just verify whether a resource has been locked and move on. في بعض الاحيان نحن بحاجة فقط إلى التحقق مما إذا كانت الموارد قد مغلق والسير قدما. Unfortunately we have no way to check the status of a semaphore lock in php. وللأسف ليس لدينا اي وسيلة للتحقق من وضع أ قفل عمود الاشارة في بي. اتش. بى. Let’s see how we can implement non-blocking semaphore access in PHP. دعونا نرى كيف يمكننا ان عدم عرقلة تنفيذ عمود الاشارة في الوصول بي. اتش. بى.
As the semaphore library doesn’t give us what we need we will have to use file existence as a lock instead. كما عمود الاشارة المكتبه لا يعطينا ما نحتاج اليه وسيتعين علينا ان استخدام الملف بوصفه وجود قفل بدلا من ذلك. The concept and implementation is simple: وتنفيذ مفهوم بسيط :
1. Before accessing a shared resource you have to check whether a pre-determined file (say .lock ) exists and file modification time doesn’t exceed a fixed (configurable) expire time. قبل الوصول الى مورد مشترك لديك للتأكد ما اذا كان محدد مسبقا ملف (أقول. لوك) ويوجد ملف تعديل وقت لا يتجاوز ثابتة (للتهيئة) تنتهي في الوقت المحدد. The second condition is required to recover from old locks which haven’t been cleared due to abrupt termination of the previous process or other reasons. الشرط الثانى هو المطلوب للتعافي من الاقفال القديمة ، التي لم يتم تطهيرها مفاجئ نظرا لانهاء العملية السابقة او لاسباب اخرى.
2. If either of the condition is not satisfied in step 1 then create or modify the lock file and use the shared resource. أما إذا كان الشرط هو من لم يقتنع بعد ذلك في الخطوة 1 انشاء او تعديل قفل الملف واستخدام الموارد المشتركة. After you are done, you must delete the lock file to allow subsequent access of the shared resource. انت بعد ذلك ، يجب ان تحذف قفل ملف لاحق لاتاحة الوصول للمورد المشترك. The deleting must be done irrespective of any error condition in earlier stages by proper exception / error handling of earlier steps to prevent abrupt termination. وقد حذف ويجب ان يتم بصرف النظر عن اي خطأ في المراحل المبكره شرطا السليم باستثناء / معالجة الاخطاء في وقت سابق من خطوات لمنع وانهاء مفاجئ.
3. If both the conditions are satisfied then the resource has been locked and not available currently. اذا كانت كل الشروط ثم تم الموارد مغلق وغير متوفره في الوقت الراهن. Now you can either wait and check periodically in a loop with sleep or move on to next tasks. الآن يمكنك اما الانتظار وفحص دوري في حلقة مع النوم او الانتقال الى المهام المقبلة.
Let look at how we can implement this with sample code: واسمحوا النظر في كيفية تنفيذ هذا القانون مع العينه :
if(file_exists(".lock") && ((time() - filemtime(".lock")) < 1800)) { // The resource is locked.اذا كانت الاجابه ب (file_exists ( "لوك") & & ((الوقت)) -- filemtime ( "لوك")) <1800)) (/ / الموارد هو مغلق.You can either move on to next tasks or wait and check periodically in a loop } else { @touch(".lock"); // Use shared resource here // Ideally this should be done after error handling in previous steps, // so no errors caused above can prevent execution of this step.يمكنك الانتقال الى المهام القادمة او الانتظار وفحص دوري في حلقة) والا (@ اتصال ( "لوك") ؛ / / هنا استخدام الموارد المشتركة / / ومن الناحية المثاليه ينبغي ان يتم ذلك بعد معالجة الاخطاء في الخطوات السابقة ، / / حتى لا تسبب الاخطاء المذكورة اعلاه يمكن ان يحول دون تنفيذ هذه الخطوة.@unlink(".lock"); // Release the lock }فك @ ( "لوك") ؛ / / الافراج عن القفل)
Filed under المقدم بمقتضى Headline News أهم الانباء , ، PHP بي. اتش. بى , ، Programming البرمجه | |
| |
RSS 2.0 ار اس اس 2،0 | |
Trackback this Article | هذه المادة |
Email this Article ارسل هذه المادة
You may also like to read ويمكنك ايضا ان تقرأ |



