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;/*指向最后一个数据,即最终的数据处理结果*/