C Academy · บทเรียน

การสร้างและจัดการเธรด

ใช้เธรด POSIX (pthread) เพื่อสร้างและควบคุมเธรดใน C

บทเรียน 2 จาก 310 ขั้นตอน

การสร้างและจัดการเธรด เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน

การสร้างและจัดการเธรด

ในการทำงานหลายเธรด เราจะสร้างเธรดหลายเธรดเพื่อทำงานหลายงานพร้อมกัน

ในบทเรียนนี้ คุณจะได้เรียนรู้:

  • วิธีสร้างเธรดหลายเธรดใน C
  • วิธีรอให้เธรดทำงานเสร็จ
  • วิธีส่งอาร์กิวเมนต์ไปยังเธรด
การสร้างและจัดการเธรด — ภาพประกอบ 1

การสร้างเธรดหลายเธรด

เราใช้ pthread_create() เพื่อสร้างเธรดหลายเธรด

ไวยากรณ์:

pthread_create(&thread, NULL, function, argument);

เธรดแต่ละเธรดทำงานอย่างอิสระ แต่ใช้หน่วยความจำร่วมกับเธรดอื่น

ตัวอย่าง: การสร้างเธรดหลายเธรด

โปรแกรมนี้สร้างเธรดหลายเธรดที่ทำงานพร้อมกัน

#include <stdio.h>
#include <pthread.h>

void *printMessage(void *arg) {
    printf("Thread %d: Hello from thread!\n", *(int*)arg);
    return NULL;
}

int main() {
    pthread_t threads[3];
    int thread_ids[3] = {1, 2, 3};

    for (int i = 0; i < 3; i++) {
        pthread_create(&threads[i], NULL, printMessage, &thread_ids[i]);
    }

    for (int i = 0; i < 3; i++) {
        pthread_join(threads[i], NULL);
    }
    return 0;
}

การรอให้เธรดทำงานเสร็จ

ใช้ pthread_join() เพื่อรอให้เธรดทำงานเสร็จสมบูรณ์

ไวยากรณ์:

pthread_join(thread, NULL);

หากไม่ใช้ pthread_join() เธรดหลักอาจสิ้นสุดก่อนที่เธรดอื่นจะทำงานเสร็จ

การส่งอาร์กิวเมนต์ไปยังเธรด

สามารถส่งอาร์กิวเมนต์ไปยังฟังก์ชันของเธรดผ่านตัวชี้ได้

ตัวอย่าง:

pthread_create(&thread, NULL, function, (void*)&value);

ฟังก์ชันของเธรดจะแปลงชนิดของอาร์กิวเมนต์กลับเป็นชนิดเดิม

ตัวอย่าง: การส่งอาร์กิวเมนต์ไปยังเธรด

โปรแกรมนี้สาธิตวิธีส่งอาร์กิวเมนต์ไปยังฟังก์ชันของเธรด

#include <stdio.h>
#include <pthread.h>

void *printNumber(void *arg) {
    int num = *(int*)arg;
    printf("Thread received number: %d\n", num);
    return NULL;
}

int main() {
    pthread_t thread;
    int value = 10;
    pthread_create(&thread, NULL, printNumber, &value);
    pthread_join(thread, NULL);
    return 0;
}

การสิ้นสุดเธรด

ใช้ pthread_exit() เพื่อสิ้นสุดเธรดโดยชัดเจน

ตัวอย่าง:

pthread_exit(NULL);

ฟังก์ชันหลักควรเรียกใช้ pthread_exit() ด้วยเมื่อจำเป็น

แนวทางปฏิบัติที่ดีในการจัดการเธรด

เพื่อจัดการเธรดอย่างมีประสิทธิภาพ:

  • ใช้ pthread_join() เสมอ เพื่อป้องกันการสิ้นสุดก่อนเวลา
  • ส่งอาร์กิวเมนต์ผ่านตัวชี้ เพื่อป้องกันข้อมูลเสียหาย
  • ลดความขัดแย้งในการใช้ทรัพยากรร่วมกันให้น้อยที่สุด

สรุป

ในบทเรียนนี้ คุณได้เรียนรู้:

  • วิธีสร้างเธรดหลายเธรดโดยใช้ pthread_create()
  • วิธีรอเธรดโดยใช้ pthread_join()
  • วิธีส่งอาร์กิวเมนต์ไปยังเธรด
  • วิธีสิ้นสุดเธรดอย่างปลอดภัย

ถัดไป เราจะสำรวจการประสานการทำงานและภาวะการแข่งขันในการทำงานหลายเธรดกัน

การสร้างและจัดการเธรด — ภาพประกอบ 10
เริ่มต้นได้ฟรี

เรียนรู้ C ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
39
บทเรียน
144

คำถามที่พบบ่อย

บทเรียน “การสร้างและจัดการเธรด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างและจัดการเธรด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างและจัดการเธรด”

ใช้เธรด POSIX (pthread) เพื่อสร้างและควบคุมเธรดใน C คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “การสร้างและจัดการเธรด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนะนำเธรด
  2. การสร้างและจัดการเธรด
  3. การซิงโครไนซ์และภาวะแข่งขัน
← กลับไปที่ C Academy