Vâng, tôi nghĩ (và có một số nghiên cứu) rằng STM hiện tại không nhanh hơn mã không có khóa và dựa trên mutex. Rõ ràng: STM yêu cầu kiểm tra xung đột dữ liệu trực tuyến. Tuy nhiên, việc kiểm tra xung đột như vậy trong phần mềm thuần túy đòi hỏi chi phí đầu tư rất lớn. Hiện tại, chỉ có ROCK processor của Sun hỗ trợ một dạng giới hạn STM (HTM cố gắng tốt nhất với STM) theo phần cứng. Không có CPU x86 nào hỗ trợ TM trong phần cứng. Trong ngắn hạn, STM chỉ là chậm.
Theo ý kiến của tôi, bạn nên sử dụng bảng băm đồng thời. Ví dụ: bạn có thể tìm thấy concurrent_hash_map
trong Intel TBB. Đây là liên kết của TBB Manual. Oh, nhưng đó là C + +, không C. Nhưng, tôi tin rằng bạn có thể (mặc dù nó có thể mất công việc quan trọng) dịch C + + - dựa trên bảng băm như vậy để mã C. Intel TBB là mã nguồn mở.
Ngoài ra, tôi cho rằng cấu trúc dữ liệu đồng thời cao (thường được thực hiện như không có khóa) không phải lúc nào cũng hữu ích. Trong một số mô hình khối lượng công việc, việc sử dụng các cấu trúc dữ liệu như vậy là không tốt. Để chắc chắn, tôi khuyên bạn nên viết một điểm chuẩn nhỏ cho hai phiên bản của bảng băm: (1) không khóa và (2) dựa trên khóa. Ngoài ra, xin lưu ý rằng các mẫu tải công việc cho điểm chuẩn vi mô đó phải gần với điểm chuẩn thực. Một ví dụ có thể được tìm thấy trong here.
Ý của bạn là STL thay vì STM? –
Tôi nghĩ anh ấy có nghĩa là STM - Phần mềm giao dịch bộ nhớ - vì anh ấy đang tìm kiếm những thứ như ảnh chụp nhanh và tự động thử lại: http://en.wikipedia.org/wiki/Software_transactional_memory Nhưng anh ấy có lẽ nên làm rõ điều đó, vì STM không phải là khu vực rất nổi tiếng. –
Sửa mô tả. Michael nói đúng. – viraptor