Tôi đang gặp một số sự cố với kết quả sai từ pthread_getspecific
trong thư viện được thiết kế để liên kết với nhiều ứng dụng iOS khác nhau.Cách lưu trữ bộ nhớ cục bộ mạnh mẽ trong iOS
Tôi thấy rằng Apple writes:
Cocoa và POSIX lưu trữ các từ điển chủ đề theo những cách khác nhau, vì vậy bạn không thể trộn và kết hợp các cuộc gọi đến hai công nghệ. Miễn là bạn gắn bó với một công nghệ bên trong mã chuỗi của bạn, tuy nhiên, kết quả cuối cùng phải giống nhau. Trong Cocoa, bạn sử dụng phương thức threadDictionary của một đối tượng NSThread để truy xuất một đối tượng NSMutableDictionary, mà bạn có thể thêm bất kỳ khoá nào được yêu cầu bởi luồng của bạn. Trong POSIX, bạn sử dụng các hàm pthread_setspecific và pthread_getspecific để thiết lập và nhận các khóa và giá trị của chuỗi của bạn.
Điều đó có nghĩa rằng không chức năng Cocoa cũng không POSIX TLS có thể được dự kiến làm việc trong mã thư viện khi chúng ta không biết liệu mã mà kêu gọi chúng ta đã sử dụng một hay khác?
Làm cách nào để có thể lưu trữ và truy xuất con trỏ địa phương chủ yếu trong những trường hợp này?
Có hỗ trợ API TLS gốc Darwin, chúng tôi nên sử dụng thay cho Cocoa hoặc POSIX không?
** Đã giải quyết **: Các triệu chứng ban đầu khiến tôi nghi ngờ sự cố pthread_getspecific hóa ra là do các con trỏ lơ lửng để lại bởi một điều kiện chủng tộc không liên quan ở nơi khác trong chương trình. –