Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Thư viện POSIX Thread (Pthreads) trong C

Giới thiệu

Pthreads (POSIX Threads) là chuẩn IEEE 1003.1c định nghĩa API để tạo và đồng bộ hóa luồng (thread). Đây là đặc tả hành vi, không phải triển khai cụ thể. Các hệ điều hành UNIX/Linux/macOS/Solaris hỗ trợ nguyên sinh; Windows cần thư viện thứ ba.

Ví dụ: Tính tổng số nguyên không âm trong luồng riêng

Chương trình minh họa API Pthreads cơ bản:

  • Luồng chính (main) khởi tạo
  • Tạo luồng thứ hai chạy hàm runner()
  • Cả hai chia sẻ biến toàn cục sum
  • Luồng chính chờ luồng con kết thúc bằng pthread_join()

Code C

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

int sum;  // Dữ liệu chung

void *runner(void *param) {
    int i, upper = atoi(param);
    sum = 0;
    for (i = 1; i <= upper; i++)
        sum += i;
    pthread_exit(0);
}

int main(int argc, char *argv[]) {
    pthread_t tid;
    pthread_attr_t attr;

    if (argc != 2) {
        fprintf(stderr, "usage: a.out \n");
        return -1;
    }
    if (atoi(argv[1]) < 0) {
        fprintf(stderr, "%d must be >= 0\n", atoi(argv[1]));
        return -1;
    }

    pthread_attr_init(&attr);
    pthread_create(&tid, &attr, runner, argv[1]);
    pthread_join(tid, NULL);
    printf("sum = %d\n", sum);
    return 0;
}

Các hàm chính

HàmMô tả
pthread_create()Tạo luồng mới
pthread_join()Chờ luồng kết thúc
pthread_exit()Kết thúc luồng hiện tại
pthread_attr_init()Khởi tạo thuộc tính luồng

Biên dịch

gcc -pthread program.c -o program