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àm | Mô 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