2015-05-18 5 views
6

मैं जिज्ञासा से यह पूछ रहा हूं।मैक ओएस विंडोज फाइबर एपीआई के बराबर है?

विंडोज़ उन्हें Fibers API पर कॉल करता है, जो हल्के उपयोगकर्ता प्रक्रियाओं/धागे के लिए एक एपीआई है।

मुझे यह जानने में दिलचस्पी थी कि मैक ओएस ऐसी सुविधाएं भी प्रदान करता है या नहीं। जहां तक ​​मैं पता लगा सकता हूं, निकटतम यूनिक्स इसके समतुल्य setcontext कार्यों का परिवार होगा। हालांकि, मैक प्रोग्राम पर ऐसे एपीआई को कॉल करने का प्रयास चेतावनी उत्पन्न करता है कि ओएसएक्स 10.6 के बाद से कार्यों को हटा दिया गया है। साथ ही, जब मैं उपरोक्त विकिपीडिया लिंक में प्रदान किए गए उदाहरण को संकलित और चलाने का प्रयास करता हूं, तो मुझे पहले swapcontext पर मेरी मशीन पर एक सीजी गलती मिलती है।

तो स्पष्ट रूप से setcontext एपीआई मैक के लिए कोई नहीं है। कम से कम अब नहीं। क्या मैक ओएस पर लाइटवेट उपयोगकर्ता-साइड थ्रेड प्राप्त करने का कोई और तरीका है? क्या सिस्टम ऐसी कार्यक्षमता प्रदान करता है?

+1

क्या आपने ग्रैंड सेंट्रल डिस्पैच देखा है? –

+0

@ScottHunter, मुझे कुछ जीसीडी ढांचे के बारे में पता है। लेकिन क्या यह उदाहरण के लिए मैन्युअल रूप से काम के धागे के बीच स्विचिंग की अनुमति देता है, जैसे कि यह फाइबर के साथ है? मुझे नहीं लगता कि जीसीडी को उपयोगकर्ता-पक्ष धागे के बराबर माना जा सकता है ... – glampert

+0

मैं मैक ओएस सेटकॉन्टेक्स्ट() को बहुत तेज़ी से छोड़ना नहीं चाहूंगा ... बहिष्कृत कार्य आमतौर पर अभी भी काम करते हैं; वे भविष्य में ओएस रिलीज में समर्थित होने की गारंटी नहीं देते हैं। तो यह MacOS के तहत काम कर रहे setcontext() को पाने के लिए कुछ विवरण tweaking सिर्फ एक मामला हो सकता है। –

उत्तर

2

नहीं, ओएस एक्स (या उस मामले के लिए अधिकांश यूनिक्स-आधारित सिस्टम) पर कोई समतुल्य नहीं है। ucontext कार्यों की श्रृंखला को पॉज़िक्स मानक द्वारा बहिष्कृत किया गया था और कोई प्रतिस्थापन प्रदान नहीं किया गया था।

ओएस एक्स पर सबसे नज़दीक आप Grand Central Dispatch पर प्राप्त कर सकते हैं, जो आपको 'ब्लॉक' (अनिवार्य रूप से कार्य) निष्पादित करने वाली प्रेषण कतार बनाने की अनुमति देता है। इन कतारों की प्रसंस्करण को फाइबर के समान निलंबित और फिर से शुरू किया जा सकता है, हालांकि आप ब्लॉक के बीच में निष्पादन को रोक नहीं सकते और फिर से शुरू नहीं कर सकते हैं।

Boost.Context भी है, जो ucontext (और शायद इसे आंतरिक रूप से भी उपयोग करता है) के समान कार्यक्षमता प्रदान करता है, हालांकि यह एक सी ++ लाइब्रेरी है।

संबंधित मुद्दे