Có ai có kinh nghiệm với std::async
mới thay đổi không? Chúng tôi hiện đang triển khai trình phân tích cú pháp tệp song song, đọc một đoạn tệp và chuyển đoạn này thành một hàm không đồng bộ.Hành vi của GCC với tiêu chuẩn :: async (std :: launch :: async) so với hành vi của Clang
Sử dụng Clang (v3.0) theo cách này hoạt động thực sự tốt với chính sách mặc định std::async
(phụ thuộc thực hiện). Trên một máy tính hai lõi, nó cháy lên đến 4 chủ đề những gì hoạt động thực sự tốt.
Nhưng với GCC (v4.7), chuỗi đọc tệp không sinh ra bất kỳ chuỗi mới nào, làm cho chương trình ở cuối hoàn toàn tuần tự.
Sử dụng std::launch::async
, cả hai phiên bản đều hoạt động khá giống nhau (trường hợp nào xảy ra).
Có ai biết trạng thái hiện tại của khả năng luồng C++ 11 của GCC không? Hoặc có thể đây là lỗi trong quá trình triển khai của chúng tôi?
đang viết tắt:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
Tôi thực sự khuyên bạn nên sử dụng Boost. Nó sẽ không phải là một bước nhảy lớn để hỗ trợ C++ 11 thích hợp. Các mô hình luồng mới trong C++ 11 yêu cầu bố trí bộ nhớ khác với GCC hoặc MSVC đang sử dụng và chúng không được triển khai thực sự nhiều. –