Pthread并行编程总结

本文总结了Pthread并行编程,包括pthread_create的使用,线程数据共享,线程间“Hello World”示例,其他基础API,以及一个涉及多数组排序的综合实例,探讨了线程数据划分对负载均衡的影响。
摘要由CSDN通过智能技术生成

Pthread并行编程总结

1. pthread_create

int pthread_create(pthread_t *, 
                const pthread_attr_t *,
                void * (*)(void *),   
                void *)

调用例:

errcode = pthread_create(&thread_id, &thread_attribute,&thread_fun, &fun_arg);
  • thread_id 线程ID或句柄(用于停止线程等)
  • thread_attribute 各种属性,空指针表示标准默认属性值
  • thread_fun 要运行的函数(参数和返回值类型都是void*)
  • fun_arg 传递给thread_fun的参数
  • errorcode 若创建失败,返回非零值
pthread_create的效果
  • 主线程借助操作系统创建一个新线程
  • 线程执行一个特定函数thread_fun
  • 所有创建的线程执行相同的函数,表示线程的计算任务分解
  • 对于程序中不同线程执行不同任务的情况,可用创建线程时传递的参数区分线程的“id”以及其他线程的独特特性
一个简单的线程例子
int main()
{
    pthread_t threads[16];
    int tn;
    for(tn=0;tn<16;tn++)
    {
        pthread_create(&threads[tn],NULL,ParFun,NULL);
    }
    for(tn=0;tn<16;tn++)
    {
        pthread_join(threads[tn],NULL);
    }
    return 0;
}

这段代码创建了16个线程执行函数“ParFun”.

注意:创建线程的代价很高,因此ParFun应完成很多工作才值得付出这种代价

2. 线程数据共享

  • 全局变量都是共享的
  • 在堆中分配的对象可能是共享的(指针共享)
  • 栈中的变量是私有的:将其指针传递给其他线程可能导致问题
  • 常用共享方式:创建一个“线程数据”结构传递给所有线程,例如:
char *message = "Hello World!\n";     
    pthread_create( &thread1,
                NULL,
                  (void*)&print_fun,
                  (void*) message);

3. Pthread “Hello world”

3.1 一些准备
  • 线程数(threadcount)运行时设置,从命令行读取
  • 每个线程打印“Hello from thread <X> of <threadcount>”
3.2 pthread_join函数
int pthread_join(pthread_t *, void **value_ptr);

说明:

  • 作用:“挂起调用线程,直至目标线程结束,除非目标线程已结束。”
  • 第二个参数允许目标线程退出时返回信息给调用线程(通常是NULL)
  • 如发生错误返回非零值
3.3 “Hello World”
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/* Global variable: accessible to all threads */
int thread_count;

// 线程执行函数
void* Hello(void* rank); /* Thread function */

int main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值