
Chương 3. Giới thiệu lập trình
đa luồng

3.1. Khởi tạo và thực thi các luồng trên Windows
3.2. Đồng bộ và tránh xung đột trong lập trình đa
luồng
Chương 3. Giới thiệu lập trình đa luồng
114

Khởi tạo luồng mới:
Các tham số cần quan tâm:
•StartAddress tên của hàm thực thi, cần được khai báo trước
•Parameter con trỏ tham số truyền vào hàm thực thi
Kết quả trả về:
•FALSE – nếu xảy ra lỗi, có thể dùng hàm GetLastError() để xác định
•NOT FALSE – HANDLE sử dụng để tham chiếu đến luồng
3.1 Khởi tạo và thực thi các luồng
115
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES ThreadAttributes,
DWORD StackSize,
LPTHREAD_START_ROUTINE StartAddress,
LPVOID Parameter,
DWORD CreationFlags,
LPDWORD ThreadId );

Khởi tạo luồng mới:
• Hàm CreateThread() yêu cầu khai báo hàm thực thi (có thể khai
báo prototype trước khi thực hiện nội dung hàm)
• Hàm thực thi được chạy ngay sau khi luồng được tạo
• Ví dụ khai báo prototype của hàm thực thi:
3.1 Khởi tạo và thực thi các luồng
116
DWORD WINAPI MyThreadStart(LPVOID p);

Xóa luồng:
• Mục đích giải phóng tài nguyên (bộ nhớ) sau khi các luồng thực
hiện xong.
• Nếu tạo quá nhiều luồng mà không giải phóng tài nguyên:
– Gây rò rỉ bộ nhớ
– Không tạo thêm được luồng mới
• Khi chương trình kết thúc, các luồng được tự động giải phóng.
3.1 Khởi tạo và thực thi các luồng
117
BOOL CloseHandle(HANDLE hObject);