Thread-Safe

เวลาเราเขียนโปรแกรมเป็น procedural ตามปรกติ มักจะมีฟังก์ชั่นต่างๆ ที่ช่วยให้เราทำงานได้ง่ายๆ อยู่เยอะ อย่างเช่น strtok ซึ่งก็ทำงานได้ดี

แต่เวลาที่เขียนโปรแกรมแบบ multi-thread การใช้ฟังก์ชั่นพวกนี้สร้างความปวดหัวได้อย่างไ่ม่น่าเชื่อ เช่น เพราะการเรียกใช้ฟังก์ชั่นที่ไม่ได้ระบุว่าเป็น thread-safe จากคนละเธรดกันนั้น อาจะสร้างบั๊กที่ยากจะจับได้ในอนาคต ซึ่งโดยมากมันเกิดอาการ segmentation-fault แบบไม่รู้สาเหตุ พวกมาก็ core dump กันดื้อๆ โดยไม่พูดไม่จา

ใน HP-UX นั้นอิมพลีเมนต์ฟังก์ชั่นที่ไม่ปลอดภันต่อเธรดด้วยการมี Mutex ไว้ในตัว ทำให้มันไม่เกิด SIGENV แต่ใช่ว่าปลอดภัยเพราะเกิด Deadlock เอาได้ง่ายๆ เหมือนกัน

ทางแก้ที่ดีกว่าคือการหลีกเลี่ยงใช้ฟังก์ชั่นเหล่านี้ หากเราไม่มั่นใจว่าฟังก์ชั่นที่เราเขียนจะไม่มีใครเอาไปใช้ในเธรดในอนาคต

 

lewcpe

CTO at MFEC PLC. Chief Editor at Blognone.com

 

One thought on “Thread-Safe

Comments are closed.