Cấp phát dữ liệu riêng của thread

Một phần của tài liệu Lập trình luồng (Trang 41 - 62)

Hàm pthread_key_create() được dùng để cấp phát một khóa mới. Khóa này bây giờ sẽ trở nên có giá trị cho tất cả các thread trong tiến trình. Khi một khóa được tạo ra, giá trị mặc định là NULL. Sau đó trong mỗi thread có thểthay đổi giá trịnhư

Sinh viên: Cấn Việt Dũng 42 Lớp : K51CHTTT

/* rc được dùng để lưu giá trị trả về của hàm pthread_key_create() */ int rc;

/* định nghĩa 1 biến để nắm giữ khóa, tạo ra 1 lần */ pthread_key_t list_key;

/* cleanup_list là một hàm có thể làm sạch dữ liệu */ extern void* cleanup_list(void*);

/* Tạo ra khóa */

rc = pthread_key_create(&list_key, cleanup_list);

Chú ý sau khi hàm pthread_key_create() trả về, biến list_key sẽ trỏ tới cái

khóa vừa mới được tạo ra. Con trỏ hàm trong tham số thứ hai của hàm pthread_key_create() sẽ tự động được gọi bởi thư viện Pthread khi thoát ra khỏi

thread, với một con trỏ trỏ đến giá trị của khóa như là một tham số. Chúng ta cũng

có thể dùng con trỏ NULL và khi đó sẽ không có hàm nào được trả về cho khóa.

Chú ý rằng, các hàm được gọi một lần trong mỗi thread, kể cả khi chúng ta tạo ra khóa này chỉ một lần, trong một thread. Nếu chúng ta tạo ra vài khóa, hàm destructor liên quan sẽ được gọi theo một trật tự tùy ý, bất kể thứ tự của các khóa tạo

ra.

Nếu hàm pthread_key_create() thành công, nó sẽ trả về giá trị 0. Ngược lại, nó

sẽ trả về vài dòng lỗi. Có một giới hạn PTHREAD_KEYS_MAX() có thể tồn tại

trong quá trình tại bất kỳ thời điểm nào. Mọi cố gắng để tạo ra khóa sau khi thoát

PTHREAD_KEYS_MAX sẽ gặp phải một giá trị trả về là EAGAIN từ hàm pthread_key_create().

Một phần của tài liệu Lập trình luồng (Trang 41 - 62)