提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录文章目录

一、为什么需要线程?

创建线程

示例:计算斐波恩夕法

一、为什么需要线程?在多核处理器的计算机上,线程可以充分利用 CPU 资源,提高程序的执行效率。线程是轻量级的进程,创建和销毁的开销远小于进程,使得线程成为并发编程的首选。

创建线程在 Linux 中,使用 pthread 库创建线程的基本步骤如下:

包含头文件:

#include

定义线程函数: 线程函数是线程执行的入口点,它必须符合特定的函数签名。

void* thread_function(void* arg) {

// 线程执行的代码

return nullptr;

}

创建线程: 使用 pthread_create 函数创建线程,并将线程函数作为参数传递。

pthread_t thread;

int result = pthread_create(&thread, nullptr, thread_function, nullptr);

if (result != 0) {

// 处理错误

}

等待线程结束: 使用 pthread_join 函数等待线程结束。

void* ret = nullptr;

pthread_join(thread, &ret);

销毁线程: 线程结束时,使用 pthread_exit 函数退出线程。

pthread_exit(nullptr);

示例:计算斐波恩夕法下面是一个使用线程计算斐波那契数列的示例,展示了如何创建多个线程来并行计算。

#include

#include

#include

void* calculate_fibonacci(int n) {

std::cout (args);

self->_is_running = true;

self->_lwpid = get_lwp_id();

self->_func();

pthread_exit((void *)0);

}

void Start() {

int n = pthread_create(&_tid, nullptr, start_routine, this);

if (n == 0) {

std::cout ;

int main() {

std::vector numbers = {0, 1, 1, 2, 3, 5, 8, 13};

Thread threads;

for (auto num : numbers) {

Thread t([= calculate, "Thread " + std::to_string(num)]);

t.Start();

threads.push_back(std::move(t));

}

for (auto& t : threads) {

t.Join();

}

return 0;

}