Thread-Safe

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

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

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

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

Comments 1

  1. plynoi wrote:

    ใน .net ก็มี mutex เหมือนกันนะ

    Posted 10 Jan 2006 at 6:57 am

Post a Comment

Your email is never published nor shared.