Mutex Programming
การจัดจังหวะการทำงานของเทรด (Thread Synchronization)
Last updated
Was this helpful?
การจัดจังหวะการทำงานของเทรด (Thread Synchronization)
Last updated
Was this helpful?
Mutex lock (MUTual EXclusion lock) เป็น Semaphore อย่างง่ายที่นำมาใช้ในการจัดการ Mutual Exclusion กับทรัพยากรที่ถูกใช้งานร่วมกันได้อย่างมีประสิทธิภาพโดยเฉพาะกับ thread โดย Mutex จะเป็นตัวแปรที่มีได้ 2 สถานะ คือ สถานะปลดล็อค (unlock
) หรือ สถานะล็อค (lock
) ซึ่งใช้เพียง 1 บิต (1-bit) ที่แสดงสถานะของมัน แต่ในทางปฏิบัติเราใช้ตัวแปรจำนวนเต็ม (integer) โดยให้สถานะ unlocked
เป็นเลขศูนย์ และสถานะ lock
จะใช้เลขอื่นแทน
นักพัฒนาสามารถพัฒนาโปรแกรมโดยเรียกใช้ความสามารถในการจัดกลไกการทำงานประสานกันระหว่างเทรด (synchronization mechanisms) โดยไม่ให้เกิดปัญหาในกรณีที่เทรดแต่ละตัวจะต้องเข้าไปใช้ทรัพยากรตัวเดียวกัน ภายในเครื่องคอมพิวเตอร์เดียวกันโดยใช้ไลบรารี pthread ซึ่งจากรูปด้านบนแสดงการอนุญาตเพียง thread #1 ตัวเดียวที่สามารถเข้าไปกำหนดค่า mutex (Mutual Exclusion Lock) เพื่อเข้าถึงทรัพยากรหรือตัวแปร โดยที่ thread #2 จะต้องรอ (block) คิวเพื่อเข้าถึงทรัพยากรหรือตัวแปรหลังจากที่ thread #1 ทำงานเสร็จเรียบร้อยแล้ว ตัว thread #2 จึงจะสามารถเข้าไปกำหนดค่า mutex เพื่อขอเข้าถึงทรัพยากรหรือตัวแปรนั้นต่อไป
แต่อย่างไรก็ตามการใช้ mutex จะถูกใช้ได้เพียงในกรณีมีหลายเทรดในโปรเซสตัวเดียวกันเท่านั้น แต่ในกรณีที่มีหลายโปรเซสต้องการเข้าใช้ทรัพยากรเดียวกัน จะต้องแก้ไขโดยการใช้เทคนิค semaphore แทน mutex ซึ่งจะกล่าวในหัวข้อ 6.2.3 ต่อไป
ตัวอย่างแสดงการสร้างเทรดจำนวน 10 เทรด โดยแต่ละตัวจะเข้าไปใช้งานตัวแปรกลางชื่อว่า counter แต่จะต้องเพิ่มค่า counter ได้เพียงครั้งละ 1 เทรดเท่านั้น
คอมไพล์ และทดสอบรันโปรแกรม