จากตอนที่แล้วบอกว่าลินุกซ์มี Threading Model อยู่สองแบบที่นิยมใช้ อันแรกคือแบบเก่า LinuxThreads กับของใหม่ NPTL ที่นี้เราจะอยู่ได้ไงว่าเรากำลังใช้ตัวไหนอยู่ เพราะถึงจะบอกว่า LinuxThreads กำลัง obsolete ไปแต่ลินุกซ์ส่วนมากก็จะมีตัวไบนารี่ ของทั้งสองตัวมาให้ด้วย เนื่องจากยังมีโปรแกรมเก่า ๆ มากมายที่ยังใช้ LinuxThreads อยู่และเนื่องด้วย LinuxThreads ไม่ได้เขียนตาม Posix Thread Standard ทั้งหมดทำให้มีบางฟังก์ชั่นที่ไม่ได้ตาม Posix standard ที่ถูกเรียกใช้โดยโปรแกรมเก่า ๆ นั้นไม่สามารถ ถูกยกเอามาใช้กับ NPTL ได้สมบูรณ์ เพราะงั้นบางเวลาที่เราจะรันโปรแกรมพวกนี้จำเป็นต้องคอนฟิกให้ใช้กับโมเดลที่ถูกต้อง ไม่งั้นอาจมี ไฟล์ coredump มาให้อ่านเล่น ๆ กัน
ที่นี้มาเรื่องวิธีหาว่าเรากำลังใช้โมเดลตัวไหนอยู่ วิธีการก็ง่าย ๆ ใช้คำสั่งนี้
$ getconf GNU_LIBPTHREAD_VERSION
ก็จะได้เอาท์พุตออกมาคล้าย ๆ แบบนี้
NPTL 0.34
หรือ
linuxthreads-0.10
ส่วนเวลาที่เราจะเลือกใช้โมเดลตัวไหนก็ให้เซตค่าตัวแปล LD_ASSUME_KERNEL ครับ โดยเซตได้ตามนี้
# LinuxThreads export LD_ASSUME_KERNEL=2.4.19 (floating stacks feature) export LD_ASSUME_KERNEL=2.2.5 (fixed stack size)
ลองใช้ getconf GNU_LIBPTHREAD_VERSION ค่าก็จะได้เป็น LinuxThreads
คำเตือน: ใช้ว่าเราจะสามารถเซตค่า LD_ASSUME_KERNEL ได้ตามใจน่ะครับ ก่อนเซตก็ให้ลองอ่านเอกสารของลินุกซ์เวอร์ชั่นที่เราใช้ให้ดี ๆ ก่อนล่ะกันครับ
Comments
ตอนนี้ผมทำหัวข้อเอกเทศเกี่ยวกับการดักจับข้อมูล ก็อยากได้ที่ปรึกษาสักคนไม่ทราบว่าพี่จะเป็นที่ปรึกาให้ได้มั้ยครับ