C++多线程pthread和thread

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程

  • 基于进程的多任务处理是程序的并发执行。
  • 基于线程的多任务处理是同一程序的片段的并发执行。

多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。

Linux 操作系统,我们要使用 POSIX 编写多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可在多种类 Unix POSIX 系统上可用,比如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Solaris。

创建线程

下面的程序,我们可以用它来创建一个 POSIX 线程:

#include <pthread.h>
pthread_create (thread, attr, start_routine, arg) 

在这里,pthread_create 创建一个新的线程,并让它可执行。下面是关于参数的说明:

参数 描述
thread 指向线程标识符指针。
attr 一个不透明的属性对象,可以被用来设置线程属性。您可以指定线程属性对象,也可以使用默认值 NULL。
start_routine 线程运行函数起始地址,一旦线程被创建就会执行。
arg 运行函数的参数。它必须通过把引用作为指针强制转换为 void 类型进行传递。如果没有传递参数,则使用 NULL。

创建线程成功时,函数返回 0,若返回值不为 0 则说明创建线程失败。

例子1

使用 pthread_create() 函数创建了 5 个线程,每个线程输出"Hello Runoob!"

#include <iostream>
#include <pthread.h>
using namespace std;
#define NUM 5

void* hello(void* args){
    cout << "hello runoob!" << endl;
    return 0;
}

int main(){
    pthread_t tids[NUM];
    for(int i = 0; i < NUM; ++i){
        int ret = pthread_create(&tids[i], NULL, hello, NULL);
        if(ret != 0){
            cout << "pthread_create error:error_code = " << ret << endl;
        }
    }
    pthread_exit(NULL);
}

使用 -lpthread 库编译下面的程序:

例子2

使用 pthread_create() 函数创建了 5 个线程,并接收传入的参数。每个线程打印一个 "Hello Runoob!" 消息,并输出接收的参数,然后调用 pthread_exit() 终止线程。

#include <iostream>
#include <cstdlib>
#include <pthread.h>
using namespace std;
#define NUM 5
void *hello( void* threadid ){
    in
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pthread和std::thread是两种不同的线程库。引用指出,pthread是C语言中使用的线程库,而std::threadC++11标准库中包含的对线程的支持。 一个显著的区别是在创建线程时的用法。引用中提到,对于pthread,需要使用pthread_create函数来指定线程执行的函数,并将参数打包成结构体进行传递。而对于std::thread,创建一个线程对象后,线程会立即执行,不需要显式调用start或run函数。 另一个区别是在编程风格上。pthread是C语言的库,在使用时需要手动管理线程的生命周期、线程间的同步等。而std::threadC++标准库的一部分,它提供了更高级的抽象,自动处理线程的创建、销毁以及线程间的同步操作,使得编程更加方便和易于理解。 总之,pthread是一个底层的、面向C语言的线程库,而std::threadC++11标准库中提供的更高级的、面向C++的线程库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++11多线程std::thread入门使用以及对比分析pthread](https://blog.csdn.net/m0_37251750/article/details/126409127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++多线程pthreadthread](https://blog.csdn.net/natureworld2010/article/details/108501774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值