Giới thiệu
Windows API tạo luồng bằng hàm CreateThread(), truyền các thuộc tính: bảo mật, kích thước stack, cờ tạo luồng. Mặc định luồng sẵn sàng chạy (không suspended).
Luồng cha phải chờ luồng con kết thúc trước khi đọc kết quả (biến Sum do luồng con ghi). Sử dụng WaitForSingleObject() (tương đương pthread_join). Để chờ nhiều luồng: WaitForMultipleObjects().
Code C - Windows Thread API
#include <windows.h>
#include <stdio.h>
DWORD Sum; // Dữ liệu chung
DWORD WINAPI Summation(LPVOID Param) {
DWORD Upper = *(DWORD*)Param;
for (DWORD i = 0; i <= Upper; i++)
Sum += i;
return 0;
}
int main(int argc, char *argv[]) {
DWORD ThreadId;
HANDLE ThreadHandle;
int Param;
if (argc != 2) {
fprintf(stderr, "An integer parameter is required\n");
return -1;
}
Param = atoi(argv[1]);
if (Param < 0) {
fprintf(stderr, "An integer >= 0 is required\n");
return -1;
}
ThreadHandle = CreateThread(
NULL, 0, Summation, &Param, 0, &ThreadId
);
if (ThreadHandle != NULL) {
WaitForSingleObject(ThreadHandle, INFINITE);
CloseHandle(ThreadHandle);
printf("sum = %d\n", Sum);
}
return 0;
}
So sánh Pthreads vs Windows Threads
| Tính năng | Pthreads | Windows API |
|---|---|---|
| Tạo luồng | pthread_create() | CreateThread() |
| Chờ luồng | pthread_join() | WaitForSingleObject() |
| Đóng handle | Tự động / pthread_detach() | CloseHandle() |
| Dữ liệu chung | Biến toàn cục | Biến toàn cục |
Chờ nhiều luồng
HANDLE THandles[N]; // ... tạo N luồng ... WaitForMultipleObjects(N, THandles, TRUE, INFINITE);