ऐसा करने का एक तरीका यह है कि उपयोगकर्ता कोड में थ्रेडिंग पैकेज स्वयं को कर्नेल से कुछ प्रकार के टाइमर इंटरप्ट के लिए पंजीकृत करता है। जब भी यह इस तरह के बाधा प्राप्त करता है, तो यह कर्नेल को सभी कर्नेल धागे के निष्पादन को रोकने के लिए कह सकता है जो स्वयं कई अलग-अलग धागे चला रहे हैं। उन थ्रेडों में से प्रत्येक के लिए, टाइमर इंटरप्ट कोड उन धागे के लिए ढेर का निरीक्षण कर सकता है, एक सहायक स्थान में महत्वपूर्ण जानकारी (रजिस्टर्स, स्टैक पॉइंटर, प्रोग्राम काउंटर इत्यादि) रिकॉर्ड कर सकता है, फिर सिम्युलेट किए गए किसी अन्य के लिए संग्रहीत जानकारी में लोड हो सकता है धागे उस वास्तविक धागे पर चल रहे हैं। फिर यह सिम्युलेटेड थ्रेड चलाने वाले कर्नेल थ्रेड को फिर से शुरू कर सकता है। इस तरह, आप एकल कर्नेल थ्रेड पर चल रहे एकाधिक थ्रेड के बीच संदर्भ स्विचिंग अनुकरण कर सकते हैं।
लॉकिंग जैसी कुछ लागू करने के लिए, आप अपने उपयोगकर्ता स्थान में स्थानीय रूप से सभी लॉक जानकारी का ट्रैक रख सकते हैं। जब भी एक अनुरूपित थ्रेड लॉक प्राप्त करने का प्रयास करता है, तो आप जांच सकते हैं कि थ्रेड सफलतापूर्वक लॉक प्राप्त कर सकता है या नहीं। यदि ऐसा है, तो आप इसे लॉक दें। अन्यथा, आप वास्तविक रीड थ्रेड पर सिम्युलेटेड थ्रेड चल रहे हैं, इस पर स्वैप करके एक संदर्भ स्विच अनुकरण करते हैं, फिर सिम्युलेटेड थ्रेड को तब तक अवरुद्ध कर दें जब तक कि लॉक फिर से मुक्त न हो जाए।
यह सिर्फ एक शुरुआत है - यहां कई अन्य विवरण हैं (क्या होगा यदि अनुरूपित धागे में से एक ब्लॉकिंग I/O ऑपरेशन करने का प्रयास करता है? आप केवल कर्नेल थ्रेड को अवरुद्ध नहीं कर सकते हैं, क्योंकि इससे सभी को रोक दिया जाएगा नकली धागे!), लेकिन यह विचार का सारांश है।
कोरआउट, हुह? –