งานคือหาจำนวนเธรดสูงสุดที่สามารถสร้างได้ภายในโปรเซสในภาษา C
เธรดคือโปรเซสที่เบาและสามารถจัดการได้อย่างอิสระโดยตัวจัดตารางเวลา (scheduler) เนื่องจากเธรดเป็นส่วนประกอบของโปรเซส ดังนั้นจึงสามารถมีเธรดหลายตัวเชื่อมโยงกับโปรเซสเดียวกัน และใช้เวลาน้อยกว่าในการสลับบริบท (context switching) เพราะเบากว่าโปรเซส
เธรดต้องการทรัพยากรน้อยกว่าโปรเซส และยังแชร์หน่วยความจำกับเธรดเพื่อนร่วมงาน ทุกเธรดระดับผู้ใช้ (user level) ถูกจัดการเป็นงานเดียวโดยระบบปฏิบัติการ ใช้เวลาน้อยกว่าในการสร้างและทำลาย
เอาต์พุตจะต่างทุกครั้งที่รันโปรแกรม
วิธีการที่ใช้ในโปรแกรม
- สร้างฟังก์ชัน void* create(void *) และเว้นว่างไว้เพราะเพียงแค่สาธิตการทำงานของเธรด
- ใน main() กำหนดตัวแปร max = 0 และ ret = 0 ทั้งคู่เป็น int เพื่อเก็บจำนวนเธรดสูงสุดและค่าคืน
- ประกาศตัวแปร "th" เป็น pthread_t
- รันลูป while ด้วยเงื่อนไข ret == 0 และกำหนด ret = pthread_create(&th, NULL, create, NULL)
- เพิ่ม max++ ภายในลูป
- พิมพ์ max นอกลูป
ตัวอย่างโค้ด
#include <pthread.h>
#include <stdio.h>
/* เว้นฟังก์ชันว่างไว้เพราะเพียงแค่สาธิตการทำงานของเธรด */
void *create(void *) {
}
int main() {
int max = 0, ret = 0;
pthread_t th;
// วนจนกว่าจะคืนค่า 0
while (ret == 0) {
ret = pthread_create(&th, NULL, create, NULL);
max++;
}
printf(" %d ", max);
return 0;
}
ผลลัพธ์
5741