在Linux环境下,C++提供了多种实现多线程编程的方式。以下是主要的实现方法:
POSIX线程是Linux系统原生的线程接口,需要包含<pthread.h>
头文件。
#include <pthread.h>
#include <iostream>
void* threadFunction(void* arg) {
std::cout << "Hello from thread!" << std::endl;
return nullptr;
}
int main() {
pthread_t threadId;
int ret = pthread_create(&threadId, nullptr, threadFunction, nullptr);
if(ret != 0) {
std::cerr << "Thread creation failed" << std::endl;
return 1;
}
pthread_join(threadId, nullptr); // 等待线程结束
return 0;
}
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* threadSafeFunction(void* arg) {
pthread_mutex_lock(&mutex);
// 临界区代码
pthread_mutex_unlock(&mutex);
return nullptr;
}
C++11引入了<thread>
头文件,提供了跨平台的线程支持。
#include <thread>
#include <iostream>
void threadFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(threadFunction);
t.join(); // 等待线程结束
return 0;
}
void printMessage(const std::string& message) {
std::cout << message << std::endl;
}
int main() {
std::thread t(printMessage, "Hello from thread with args!");
t.join();
return 0;
}
#include <mutex>
#include <thread>
std::mutex mtx;
void safeFunction() {
std::lock_guard<std::mutex> lock(mtx);
// 临界区代码
}
#include <condition_variable>
#include <mutex>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });
// 工作代码
}
void master() {
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_all();
}
#include <vector>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <functional>
class ThreadPool {
public:
ThreadPool(size_t numThreads) : stop(false) {
for(size_t i = 0; i < numThreads; ++i) {
workers.emplace_back([this] {
while(true) {
std::function<void()> task;
{
std::unique_lock<std::mutex> lock(queueMutex);
condition.wait(lock, [this] { return stop || !tasks.empty(); });
if(stop && tasks.empty()) return;
task = std::move(tasks.front());
tasks.pop();
}
task();
}
});
}
}
template<class F>
void enqueue(F&& f) {
{
std::unique_lock<std::mutex> lock(queueMutex);
tasks.emplace(std::forward<F>(f));
}
condition.notify_one();
}
~ThreadPool() {
{
std::unique_lock<std::mutex> lock(queueMutex);
stop = true;
}
condition.notify_all();
for(std::thread &worker : workers)
worker.join();
}
private:
std::vector<std::thread> workers;
std::queue<std::function<void()>> tasks;
std::mutex queueMutex;
std::condition_variable condition;
bool stop;
};
使用g++编译时,需要链接pthread库:
g++ -std=c++11 -pthread your_program.cpp -o your_program
以上是Linux下C++多线程编程的主要实现方式,根据具体需求选择合适的方法。C++11标准线程库提供了更现代、更安全的接口,推荐优先使用。