PlusMagi's Blog By Pitt Phunsanit เทคโนโลยี Shell Script: ดูการทำงานของ File Locking (fcntl) และ Concurrency

Shell Script: ดูการทำงานของ File Locking (fcntl) และ Concurrency

ในโลกของการเขียนโปรแกรมระบบและงานแบ็กเอนด์ที่ต้องมีการประมวลผลพร้อมกันหลายส่วนประกอบ การรักษาความสมบูรณ์ของข้อมูลเป็นเรื่องสำคัญสูงสุด เมื่อมีกระบวนการ (Processes) หลายตัวพยายามอ่าน เขียน หรือแก้ไขไฟล์เดียวกันในช่วงเวลาสั้น ๆ โอกาสที่จะเกิดภาวะ Race Condition ก็สูงขึ้นอย่างมาก ซึ่งอาจส่งผลให้ฐานข้อมูลหรือไฟล์บันทึกเสียหายได้ บทความนี้จะเจาะลึกถึงกลไก File Locking โดยเฉพาะคำสั่งระดับต่ำเช่น flock และแนวคิด Concurrency เพื่อให้เข้าใจวิธีการป้องกันปัญหาดังกล่าวด้วย Shell Script

ทำไมจึงจำเป็นต้องใช้ File Locking?

เมื่อเราพูดถึง concurrency ในบริบท Unix/Linux เราหมายถึงสถานการณ์ที่มี Task มากกว่าหนึ่งกำลังทำงานขนานกัน หากไม่มีมาตรการควบคุมใดๆ ข้อมูลที่เราคาดหวังว่าจะถูกอัปเดตตามลำดับก็จะผิดเพี้ยนไป ตัวแปรพื้นบ้านทางด้านซอฟต์แวร์ เช่น ไฟล์ Log, Cache Files, หรือแม้แต่ Index ของ Database ต่างก็ต้องการ ‘พื้นที่สงวน’ ชั่วคราวเพื่อรับประกันว่า ณ เวลาที่ Process ใด Processes หนึ่งเขียนอยู่ จะไม่ถูกรบกวนจากภายนอก นี่คือจุดกำเนิดของการล็อกทรัพยากรค่ะ

Understanding fcntl() and Advisory Locks

ในเชิงเทคนิค การจัดการ Lock ระดับระบบมักเกี่ยวข้องกับการเรียก System Call ชื่อ ioctl(2) ซึ่งทำให้เกิดฟังก์ชันอย่าง `fcntl()` ที่อนุญาตให้นำ lock มาประยุกต์กับไฟล์ได้ โดยส่วนใหญ่แล้ว ระบบปฏิบัติการจะใช้กลไกของ Advisory Locking เป็นหลัก นั่นแปลว่า ไม่ใช่ทุกโปรแกรมที่จะเคารพระบบ Lock นี้ ถ้ากระบวนการ A ล็อกไฟล์ไว้ แต่กระบวนการ B เข้ามากระทำการอ่าน/เขียนโดยไม่ได้ตรวจสอบสถานะ Lock เลย กระบวนการ B ก็สามารถเข้าถึงข้อมูลนั้นได้อย่างเสี่ยงภัย ดังนั้น โปรแกรมทั้งหมดที่ทำงานบน Shared Resource นั้นต้อง

Exit mobile version