वर्तमान परिदृश्य कुछ एफडीएस पर epoll_wait है और संभावित आने वाले संदेशों की कतार है, मैं आईओ घटना या नए संदेश पर निष्पादित करने के लिए epoll_wait के नीचे लूप चाहता हूं।
तरीके मुझे पता है:गैर-आईओ घटना के साथ epoll_wait को बाधित करना, कोई संकेत
- एक
time
msec टाइमआउट का प्रयोग करें और पाश - उपयोग self-pipe trick कतार कोड जब संदेश उपलब्ध हो जाते हैं
- इंटरप्ट एक मानक संकेत के साथ syscall से में कतार पहली बात की जांच
- उपयोग epoll_pwait और परिष्कृत पिछले बिंदु अंक ऊपर तैनात की
कोई भी संतुष्ट मुझे enoug एच और मैं सोच रहा था कि क्या कोई अन्य तरीका है जो मुझे नहीं मिला है।
कारण हैं:
- सिग्नल कुछ बहु कोड पर से बचने के लिए कर रहे हैं और बहुत विश्वसनीय
- टाइमआउट एक epoll के लाभ का हिस्सा निकाल देता है, केवल घटनाओं
- स्व पाइप चाल दिखता साथ जागने नहीं हैं इस पल के लिए सबसे अच्छा तरीका, लेकिन अभी भी बहुत अधिक बॉयलरप्लेट
विचार?
मैंने eventfd सफलतापूर्वक उपयोग किया है जब केवल एक थ्रेड एपॉलफ़ेड का इंतजार कर रहा है, लेकिन एकाधिक थ्रेड के बारे में * * * epollfd का इंतजार कर रहे हैं? इस तरह के मामले में भी eventfd उपयोगी है? यदि हां, तो कैसे? –