非同期実装のオーバーヘッドを正当化するために、IO操作が十分に複雑であると仮定すると、あなたがやりたいことはまったく問題ないと思います。私の簡単な提案は次のようになります (古い質問からコピー):
#include <thread>
#include <functional>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
void io_operation(int parameter) {
//Your stuff
}
int main ( int argc, char* argv[] ) {
boost::asio::io_service io_service;
boost::asio::io_service::work work(io_service);
//Set up a thread pool taking asynchronically care of your orders
std::vector<std::thread> threadPool;
for(size_t t = 0; t < std::thread::hardware_concurrency(); t++){
threadPool.push_back(std::thread(boost::bind(&boost::asio::io_service::run, &io_service)));
}
//Post an IO-operation
io_service.post(std::bind(io_operation, 123));
//Join all threads at the end
io_service.stop();
for(std::thread& t : threadPool) {
t.join();
}
}
C++11
これは、スレッドを使用できることを前提としています。また、1 つのスレッドだけが特定のファイルに書き込んでいるとは限らないことに注意してください。したがって、特定のファイルの呼び出しが並行して処理されないようにするために、ストランドを使用する必要がある場合があります。