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ư nó mong muốn. Sau đây là cách sử dụng của hàm này:
/* 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().