温馨提示×

C++在Linux环境下如何实现多线程

小樊
38
2025-10-21 07:14:59
栏目: 编程语言

在Linux环境下,C++可以通过多种方式实现多线程。以下是几种常见的方法:

1. 使用POSIX Threads (pthreads)

POSIX Threads(通常称为pthreads)是Linux上实现多线程的标准库。

示例代码:

#include <iostream>
#include <pthread.h>

void* thread_function(void* arg) {
    int thread_id = *(static_cast<int*>(arg));
    std::cout << "Thread " << thread_id << " is running." << std::endl;
    return nullptr;
}

int main() {
    pthread_t threads[5];
    int thread_ids[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; ++i) {
        if (pthread_create(&threads[i], nullptr, thread_function, &thread_ids[i]) != 0) {
            std::cerr << "Failed to create thread "<< i << std::endl;
            return 1;
        }
    }

    for (int i = 0; i < 5; ++i) {
        pthread_join(threads[i], nullptr);
    }

    return 0;
}

编译命令:

g++ -pthread -o multithread_example multithread_example.cpp

2. 使用C++11标准库中的<thread>

C++11引入了标准库中的线程支持,使用<thread>头文件。

示例代码:

#include <iostream>
#include <thread>
#include <vector>

void thread_function(int thread_id) {
    std::cout << "Thread " << thread_id << " is running." << std::endl;
}

int main() {
    std::vector<std::thread> threads;

    for (int i = 1; i <= 5; ++i) {
        threads.emplace_back(thread_function, i);
    }

    for (auto& t : threads) {
        t.join();
    }

    return 0;
}

编译命令:

g++ -std=c++11 -pthread -o multithread_example multithread_example.cpp

3. 使用C++17标准库中的<jthread>

C++17引入了<jthread>,它是<thread>的增强版,自动处理线程的join和detach。

示例代码:

#include <iostream>
#include <thread>
#include <vector>

void thread_function(int thread_id) {
    std::cout << "Thread " << thread_id << " is running." << std::endl;
}

int main() {
    std::vector<std::jthread> threads;

    for (int i = 1; i <= 5; ++i) {
        threads.emplace_back(thread_function, i);
    }

    // No need to explicitly join threads, jthread handles it automatically

    return 0;
}

编译命令:

g++ -std=c++17 -pthread -o multithread_example multithread_example.cpp

总结

  • POSIX Threads (pthreads):适用于需要跨平台兼容性的项目。
  • C++11 <thread>:标准库提供的线程支持,适用于现代C++项目。
  • C++17 <jthread>:自动处理线程的join和detach,简化了线程管理。

选择哪种方法取决于你的具体需求和项目环境。对于大多数现代C++项目,推荐使用C++11或C++17的线程支持。

0