เธรดทั้งหมดทำหน้าที่สอดแทรกดังนั้นส่วนต่างๆของกระบวนการจึงเหลื่อมกันในเวลา เครื่องแกนเดียวที่มีหลายเธรดกระโดดข้าม: มันประมวลผลโค้ดขนาดเล็กจากเธรดหนึ่งจากนั้นสลับไปยังเธรดอื่น กำหนดการอย่างง่ายตัดสินใจว่าเธรดใดที่มีลำดับความสำคัญสูงสุดและถูกดำเนินการจริงในแกนกลาง
บนคอมพิวเตอร์แบบแกนเดียวไม่มีอะไรเกิดขึ้น "ในเวลาเดียวกัน" มันเป็นเพียงการเรียกใช้แบบอินเตอร์เลด
มีหลายวิธีหลายวิธีในการบรรลุการสอดแทรก จำนวนมาก
สมมติว่าคุณมีกระบวนการแบบสองเธรดแบบง่ายที่ใช้การล็อกแบบง่ายเพื่อให้ทั้งสองเธรดสามารถเขียนไปยังตัวแปรทั่วไป คุณมีรหัสหกบล็อก
- T1- ก่อนการล็อค
- T1- กับล็อค
- T1- ล็อคหลังจาก
- T2- ก่อนล็อค
- T2- พร้อมล็อค
- T2-after lock
[สิ่งนี้สามารถอยู่ในลูปหรือมีล็อคมากกว่าหรืออะไรก็ได้ ทั้งหมดนี้ใช้เวลานานขึ้นไม่ซับซ้อนมากขึ้น]
ขั้นตอนของ T1 จะต้องทำงานตามลำดับ (T1- ก่อน, T1- กับ, T1- หลัง) และขั้นตอนของ T2 จะต้องทำงานตามลำดับ (T2- ก่อน, T2-with, T2-after)
นอกเหนือจากข้อ จำกัด "ในการสั่งซื้อ" สิ่งเหล่านี้สามารถสอดแทรกในทางใดทางหนึ่ง อย่างไรก็ตาม. พวกเขาสามารถเรียกใช้ตามที่ระบุไว้ข้างต้น การสั่งซื้ออื่นที่ถูกต้องคือ (T1- ก่อน, T2- ก่อน, T2-lock, T1-lock, T2-after, T1-after) มีคำสั่งที่ถูกต้องมากมาย
รอ.
นี่เป็นเพียงกลไกของรัฐที่มีหกสถานะ
มันเป็นสถานะออโตมาต้าแบบไม่ จำกัด การจัดลำดับของสถานะ T1-xxx ด้วยสถานะ T2-xxx นั้นไม่แน่นอนและไม่สำคัญ ดังนั้นจึงมีสถานที่ที่ "สถานะถัดไป" คือการโยนเหรียญ
ตัวอย่างเช่นเมื่อ FSM เริ่มต้น T1-before หรือ T2-before เป็นสถานะแรกที่ถูกต้องตามกฎหมาย โยนเหรียญ
สมมติว่ามันมาก่อน T1 ทำอย่างนั้น. เมื่อทำเสร็จแล้วจะมีตัวเลือกระหว่าง T1-with และ T2-before โยนเหรียญ
ในแต่ละขั้นตอนใน FSM จะมีสองตัวเลือก (สองเธรด - สองตัวเลือก) และการโยนเหรียญสามารถกำหนดสถานะที่เฉพาะเจาะจงได้