POSIX多线程程序设计(第4章:使用线程的几种方式)

本文介绍了POSIX多线程程序设计中的三种关键方法:流水线模型,工作组模型和客户端/服务器模型。通过这些模型,开发者可以高效地利用多线程来提升程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1概述

线程编程模型有以下三种方式:

模型

说明

流水线

每个线程反复地在数据系列集上执行同一种操作,并把操作结果传递给下一步骤的其他线程,这就是“流水线”方式。即流水线上的线程对数据执行同一种操作,如简单的加1,再把数据的操作结果传递给下一个线程,直到流水线上的最后一个线程。

工作组

每个线程在自己的数据上执行操作,工作组中的线程可能执行相同或不同的操作,但一定独立执行。即线程作为工作组的成员,为完成一项工作而分工进行。如查找一个目录下包含某个字符串的文件有几个,可以让工作组的每个成员线程分别去查一个文件。

客户端/服务器

一个客户为每一件工作向一个独立的服务器提交请求(如读或写),由服务器来处理这些(如读或写)请求。

2流水线


#include "errors.h"
#include <pthread.h>
#include <sys/prctl.h>

/*线程编程模型:  流水线模型*/

/*流水线成员线程处理的数据*/
typedef struct stage_tag
{
    pthread_mutex_t  mutex;/*线程数据互斥量*/
    pthread_cond_t   avail;/*线程是否可用的条件变量*/
    pthread_cond_t   ready;
    pthread_t       thread;/*线程ID*/
    int         data_ready;/*1:表示数据已准备好;0:表示数据处理完成或未准备好*/
    long              data;/*线程数据*/
    struct stage_tag *next;
}stage_t;


/*数据集系列*/
typedef struct pipe_tag
{
    pthread_mutex_t  mutex;/*线程链表互斥量*/
    stage_t          *head;/*指向流水线第一个线程要处理的数据*/
    stage_t          *tail;/*指向最后一个数据,即最终的数据处理结果*/
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值