धारावाहिक संचार के लिए उपयोग किए जाने वाले बहु-थ्रेडेड लिनक्स प्रोग्राम में, क्या यह संभव है (और सबसे अच्छा तरीका क्या होगा) किसी अन्य थ्रेड से अवरुद्ध पढ़ने() कॉल को समाप्त करने के लिए?लिनक्स, ब्लॉकिंग को रद्द करना रद्द करें()
मैं सब कुछ यथासंभव प्रतिक्रियाशील रखना चाहता हूं और बार-बार मतदान के साथ टाइमआउट के किसी भी उपयोग से बचना चाहता हूं।
इस प्रश्न की पृष्ठभूमि यह है कि मैं जेएनआई का उपयोग कर लिनक्स के लिए स्कैला सीरियल संचार पुस्तकालय बनाने की कोशिश कर रहा हूं। मैं मूल पक्ष को जितना संभव हो सके उतना आसान रखने की कोशिश कर रहा हूं, दूसरों के बीच, एक पढ़ा() और करीबी() फ़ंक्शन। स्कैला तरफ, एक थ्रेड सीरियल पोर्ट से डेटा उपलब्ध होने तक पढ़ने() और ब्लॉक को कॉल करेगा। हालांकि, धारावाहिक बंदरगाह को अन्य माध्यमों से बंद किया जा सकता है, जिसके परिणामस्वरूप बंद करने के लिए कॉल()। अब, अवरुद्ध धागे को मुक्त करने के लिए, मुझे किसी भी तरह सिस्टम रीड कॉल को रद्द करने की आवश्यकता होगी।
संबंधित: https://stackoverflow.com/questions/384391/how-to-signal-select-to-return-immediately –