การเขียนโปรแกรมด้วยการใช้งานหลาย ๆ thread เป็นเทคนิคที่พบได้บ่อยในโลกของการพัฒนาซอฟต์แวร์ ทั้งยังช่วยเพิ่มประสิทธิภาพของโปรแกรมให้สามารถทำงานได้พร้อมกันหลายงานในเวลาเดียวกันด้วย ในภาษา C การทำงานกับ threads นั้นไม่ได้ยากเกินไป โดยเราสามารถใช้ไลบรารี POSIX Threads หรือที่รู้จักกันในชื่อ Pthreads ซึ่งเป็นมาตรฐานสำหรับการทำ multi-threading ในระบบปฏิบัติการแบบ UNIX วันนี้เราจะนำเสนอวิธีการใช้งาน thread ในภาษา C แบบง่ายๆ พร้อมกับตัวอย่าง code สามตัวอย่างและอธิบายการทำงาน
ก่อนที่เราจะพูดถึงการใช้งาน thread มาทำความเข้าใจกันก่อนว่า thread คืออะไร? Thread เป็นหน่วยการประมวลผลที่เล็กที่สุดของเป็น process ที่สามารถจัดการและกำหนดให้ทำงานได้ด้วยตัวมันเอง แต่ละ thread สามารถทำงานร่วมกับ thread อื่นๆ ในกระบวนการเดียวกันได้โดยการแชร์แหล่งข้อมูลเดียวกัน เช่น ความจำ ไฟล์ เครือข่าย ฯลฯ
ตัวอย่างโค้ดที่ 1: การสร้าง Thread พื้นฐาน
ลองมาดูตัวอย่างของการสร้าง thread ง่ายๆ ในภาษา C ด้วยไลบรารี Pthreads กันค่ะ:
ในตัวอย่างนี้ เรามีการสร้าง thread สอง threads โดยใช้ฟังก์ชัน `pthread_create` และโค้ดส่วนที่ทำงานใน thread จะอยู่ในฟังก์ชัน `doWork` ที่ทำการพิมพ์เลข ID ของ thread ที่กำลังทำงานออกมา เมื่อทำงานเสร็จแล้วเราต้องใช้ฟังก์ชัน `pthread_join` เพื่อรอให้ทุก thread ทำงานเสร็จก่อนจะปิดโปรแกรม
ตัวอย่างโค้ดที่ 2: การส่งข้อมูลเข้าไปใน Thread
ต่อไปนี้คือตัวอย่างโค้ดที่แสดงวิธีการส่งค่าเข้าไปยัง thread:
ในตัวอย่างนี้ เราสร้างโครงสร้าง `ThreadData` เพื่อเก็บข้อมูลที่เราต้องการให้แต่ละ thread จัดการ จากนั้นเราส่งออบเจกต์นี้เป็นอาร์กิวเมนต์เมื่อสร้าง thread ด้วยฟังก์ชัน `pthread_create` ข้อมูลนี้จะถูก type-cast เป็น `void*` และสามารถ type-cast กลับเพื่อใช้ในฟังก์ชัน `printMessage` ได้
ตัวอย่างโค้ดที่ 3: การใช้ Mutex ในการจัดการการเข้าถึงทรัพยากรร่วม
ในตัวอย่างนี้ เราได้แสดงวิธีการใช้ mutex ในการควบคุมการเข้าถึงตัวแปรร่วม `counter` เพื่อป้องกันปัญหาที่เกิดขึ้นจากสภาวะแข่งขัน (race condition) เมื่อมีหลาย threads พยายามเข้าถึงและปรับเปลี่ยนค่าของตัวแปรเดียวกันในเวลาเดียวกัน เราใช้ `pthread_mutex_lock` ก่อนที่จะแก้ไขค่าของตัวแปร และใช้ `pthread_mutex_unlock` หลังจากทำการแก้ไขเพื่อปล่อย lock เมื่อเราใช้งาน mutex เสร็จแล้ว เราต้องทำลายมันด้วยฟังก์ชัน `pthread_mutex_destroy`
การใช้ thread มีประโยชน์มากในการพัฒนาโปรแกรมที่ต้องการเพิ่มความเร็วในการประมวลผล หรือต้องการรับมือกับหลายงานพร้อมกัน เช่น การพัฒนาเว็บเซิร์ฟเวอร์ที่ต้องการรับมือกับรีเควสต์จากผู้ใช้หลายคนในเวลาเดียวกัน หรือแม้แต่ในการพัฒนาแอปพลิเคชันเดสก์ทอปที่ต้องการให้ UI ไม่ติดขัดจากการทำงานที่หนักหรือต้องการเวลานาน การใช้ thread ช่วยให้เราสามารถทำงานเหล่านี้ได้โดยไม่รบกวนถึงการทำงานหลักของโปรแกรม
เมื่อคุณเข้าใจและมีทักษะในการใช้งาน thread ในภาษา C แล้ว คุณจะพบว่าเป็นประตูสู่การพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพและเสถียรภาพสูง ที่ EPT หรือ Expert-Programming-Tutor เรามีหลักสูตรที่จะช่วยให้คุณเจาะลึกไปยังความรู้การเขียนโปรแกรมทั้งหมดนี้ พร้อมทั้งการใช้งาน thread และการพัฒนาโปรแกรมอย่างมืออาชีพ หากคุณสนใจที่จะเรียนรู้และพัฒนาทักษะของคุณในด้านนี้ อย่าลืมสมัครเรียนกับเราที่ EPT ที่เรายินดีที่จะนำพาคุณสู่โลกของการพัฒนาซอฟต์แวร์ด้วยมือของคุณเอง!
สร้างโอกาสในการเรียนรู้และปูทางสู่อาชีพโปรแกรมเมอร์ที่รอคุณอยู่ กับ EPT พร้อมกันเสมอ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: thread programming c multi-threading posix_threads pthreads thread_creation thread_management thread_communication mutex race_condition thread_use_cases software_development concurrency programming_tutorial
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM