मुझे निम्न कोड मिला है और सेमफोर इसे अपेक्षित रूप से लॉक नहीं करेगा।php semaphore काम नहीं करता
(मैं apc_inc के बारे में पता कर रहा हूँ। यह नहीं है कि मैं क्या देख रहा हूँ।)
$semkey = sem_get(123);
sem_acquire($semkey);
$count = apc_fetch('count111');
if(!$count) $count = 0;
$count++;
apc_store('count111', $count);
sem_release($semkey);
ab -n 4000 -c 200 http://localhost/test.php
0 अनुरोध विफल रहा है के बाद।
लेकिन उसके बाद एक apc_fetch('count111')
चलता ही ~ 1200 हिट
Ubuntu 12.04 (64 बिट), php 5.3.16 ~ dotdeb, php-एफ पी एम पर nginx
- अद्यतन 1: पूरी तरह से पर काम करता है लिनक्स टकसाल, 5.4.6 ~ dotdeb, वेब सर्वर में बनाया गया। मैं उसी मशीन के साथ उसी मशीन के साथ nginx के साथ कोशिश करने जा रहा हूँ।
बस स्पष्ट करने के लिए: मैंने लॉक ब्लॉक के अंदर 'apc_inc' कॉल डालने का प्रयास किया है और इसे सभी 4000 बार निष्पादित किया गया है। – Alex
जहां तक मैं समझता हूं कि PHP सेमफोर साझा स्मृति और संसाधन लॉक कर रहा है, कोड ब्लॉक नहीं। मेरा मानना है कि यह PHP साझा मेमोरी फ़ंक्शन – Bnaya
के साथ काम करेगा, मुझे लगता है कि sem_get सभी आवश्यक संसाधनों को प्रारंभ करता है और PHP के स्रोत कोड को बहुत अधिक पुष्टि करता है। उन्हें पॉजिक्स के सेमेट पर सीधी कॉल मिली है, जो वहां से निकलती है। इसके अलावा, सेमेफोर प्रक्रियाओं को सिंक करने के लिए मानसिक हैं जो ** ** किसी भी स्मृति को साझा नहीं करते हैं। – Alex