在CentOS系统下选择C++并发模型时,需要考虑多个因素,包括性能、可维护性、开发难度以及具体的应用场景。以下是一些常见的C++并发模型及其适用场景:
特点:
适用场景:
示例代码:
#include <pthread.h>
#include <iostream>
void* thread_function(void* arg) {
std::cout << "Thread is running" << std::endl;
return nullptr;
}
int main() {
pthread_t thread;
pthread_create(&thread, nullptr, thread_function, nullptr);
pthread_join(thread, nullptr);
return 0;
}
特点:
适用场景:
示例代码:
#include <thread>
#include <iostream>
void thread_function() {
std::cout << "Thread is running" << std::endl;
}
int main() {
std::thread t(thread_function);
t.join();
return 0;
}
特点:
适用场景:
示例代码:
#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
void session(tcp::socket sock) {
try {
for (;;) {
char data[1024];
boost::system::error_code error;
size_t length = sock.read_some(boost::asio::buffer(data), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
boost::asio::write(sock, boost::asio::buffer(data, length));
}
} catch (std::exception& e) {
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}
int main() {
try {
boost::asio::io_context io_context;
tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 12345));
for (;;) {
tcp::socket socket(io_context);
acceptor.accept(socket);
std::thread(session, std::move(socket)).detach();
}
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
特点:
适用场景:
示例代码:
#include <tbb/tbb.h>
#include <iostream>
void parallel_for_example() {
tbb::parallel_for(tbb::blocked_range<int>(0, 10), [](const tbb::blocked_range<int>& r) {
for (int i = r.begin(); i != r.end(); ++i) {
std::cout<< i << " ";
}
});
}
int main() {
parallel_for_example();
return 0;
}
选择合适的并发模型时,应综合考虑项目的具体需求、团队的技术栈以及预期的性能表现。