2011-12-23 26 views
7

Có ConcurrentHashMap nào để thực hiện C++ hay một cái gì đó tương tự ở bất cứ đâu không?ConcurrentHashMap cho C++

Tôi không thể hiểu tại sao đa luồng trong C++ lại khó hơn Java!

+0

Đa luồng quá khó vì trước khi tiêu chuẩn C++ 11 được phát hành, không có mô hình bộ nhớ chính thức nào hỗ trợ nó. –

Trả lời

4

Chủ đề không thực sự được hỗ trợ trong C++ nên không có bất kỳ điều gì trong tiêu chuẩn về các thùng chứa an toàn chỉ. Mọi người rõ ràng đã làm cho họ trước đây.

Tôi nghĩ rằng điều này của Intel có thể giúp http://www.threadingbuildingblocks.org/

tôi đã không sử dụng nó bản thân mình chưa vì vậy không guarentees.

Bạn cũng có thể bọc bất kỳ vật chứa nào trong lớp học của riêng bạn với một semaphore để làm cho nó an toàn.

Chúc may mắn.

+3

C++ 11 xác định đầy đủ mô hình luồng. –

+0

cả hai hasbaps tbb không chia sẻ cùng một thuộc tính giống như java CHM – easytiger

+0

Nhận xét này là cũ bây giờ :) là chủ đề (cpp chuẩn) được hỗ trợ ngay bây giờ trong C++ 11 trở đi – siddhusingh

1

Làm thế nào bạn làm multi-threading phụ thuộc vào hệ điều hành của bạn. Đối với các cửa sổ bạn có thể sử dụng MFC (Visual studio làm cho việc này khá dễ dàng) hoặc sử dụng #include "windows.h" và sử dụng các phương thức như CreateMutex và WaitForSingleObject. Dưới đây là ví dụ nhanh:

#include windows.h 
class myList 
{ 
public: 
    myList() 
    { 
     my_mtx_hndl = CreateMutex(NULL, FALSE, "some_cross_proc_name"); 
    } 
    add(<some_type> obj) 
    { 
     WaitForSingleObject(my_mtx_hndl, INFINITE); 
     //Add the obj 
    } 
private: 
    HANDLE my_mtx_hndl; 
}; 

Tôi đã viết một vài thùng chứa an toàn chỉ. Tôi thấy rằng nó thường là nhanh chóng trong c + + để tìm hiểu các khái niệm về an toàn chủ đề rất tốt và sau đó thực hiện nó như nhu cầu của bạn ra lệnh. Bằng cách này bạn thực sự hiểu tất cả các chi phí và lợi ích của những gì JAVA làm cho bạn. Tuy nhiên, C++ là một ngôn ngữ mạnh mẽ hơn cho phép bạn làm bất cứ điều gì bạn cần làm, cả hai đều hữu ích và nguy hiểm.

Tôi chắc chắn nếu bạn nhìn vào CodeProject hoặc trong thư viện tăng cường, bạn sẽ tìm thấy một số ví dụ tốt về các thùng chứa an toàn chỉ.

0

Có thư viện mã nguồn mở mới có tên là junction có sẵn chứa một số bản đồ đồng thời mới.

https://github.com/preshing/junction

Đó là BSD cấp phép, vì vậy bạn có thể sử dụng mã nguồn tự do trong bất kỳ dự án, cho mục đích nào.

Tìm thêm chi tiết trong this blogpost.

Nhờ tác giả Jeff.

Các vấn đề liên quan