各位好问题描述:
1.首先创建4个线程A,B,C,D,分别控制4个功能
2.线程A首先获取一组数据,获取完成后,将数据通知给线程B,线程B得到线程A的数据后,进行处理。
3.线程B将数据处理后,传递给线程C,线程C处理完数据后,通知给线程D,线程D处理结束后将数据保存到mysql求助点:
如何将数据在线程A,B,C,D 以流水线的形式处理,线程A是不停地获取数据。也就是实现一个模拟流水线的功能查找网上讲,使用队列来处理,各位给支个招吧,谢谢啦
1.首先创建4个线程A,B,C,D,分别控制4个功能
2.线程A首先获取一组数据,获取完成后,将数据通知给线程B,线程B得到线程A的数据后,进行处理。
3.线程B将数据处理后,传递给线程C,线程C处理完数据后,通知给线程D,线程D处理结束后将数据保存到mysql求助点:
如何将数据在线程A,B,C,D 以流水线的形式处理,线程A是不停地获取数据。也就是实现一个模拟流水线的功能查找网上讲,使用队列来处理,各位给支个招吧,谢谢啦
解决方案 »
- centos6.5安装 apache2.4.29, make install 时出错,这是咋回事?
- centos7.4 安装VSFTP不生效
- 请问各位高手Linu下 c++宽字符的宽流和wcin/out和 cin/out的问题
- Ubantu: sudo: unable to resolve host,为什么要这样设计?
- nginx.conf里删除域名后,然后可以访问
- 虚拟机
- Linux硬盘热插拔问题
- Linux 下,服务端已经断开连接,客户端netstat 状态依然为ESTABLISHED
- scala语言代码找错,求各位大神帮帮忙!
- shell脚本加密后,怎么执行?
- u-boot源码怎么样根据编译时候访问的文件来删除无关的源码?
- linux如何把一个程序交叉编译到板子上
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>char dataA[64];
char dataB[64];
char dataC[64];
char dataD[64];
void *worker_A(void *arg)
{
strncpy(dataA, "AAAA", 10);
printf("workA: %s\n", dataA);
pthread_exit((void *)&dataA);
}void *worker_B(void *arg)
{
char *ret;
pthread_join(*((pthread_t *)arg), (void **)&ret);
sprintf(dataB, "%s, BBBB", ret);
printf("workB: %s\n", dataB);
pthread_exit((void *)&dataB);
}void *worker_C(void *arg)
{
char *ret;
pthread_join(*((pthread_t *)arg), (void **)&ret);
sprintf(dataC, "%s, CCCC", ret);
printf("workC: %s\n", dataC);
pthread_exit((void *)&dataC);
}void *worker_D(void *arg)
{
char *ret;
pthread_join(*((pthread_t *)arg), (void **)&ret);
sprintf(dataD, "%s, DDDD", ret);
printf("workD: %s\n", dataD);
pthread_exit((void *)&dataD);
}int main()
{
pthread_t tidA, tidB, tidC, tidD;
int i; for (i = 0; i < 10; i ++) { if (pthread_create(&tidA, NULL, worker_A, NULL)) {
fprintf(stderr, "pthread_create error.");
exit(EXIT_FAILURE);
} if (pthread_create(&tidB, NULL, worker_B, (void *)&tidA)) {
fprintf(stderr, "pthread_create error.");
exit(EXIT_FAILURE);
} if (pthread_create(&tidC, NULL, worker_C, (void *)&tidB)) {
fprintf(stderr, "pthread_create error.");
exit(EXIT_FAILURE);
} if (pthread_create(&tidD, NULL, worker_D, (void *)&tidC)) {
fprintf(stderr, "pthread_create error.");
exit(EXIT_FAILURE);
} pthread_join(tidD, (void **)NULL); } return EXIT_SUCCESS;
}
{
//处理
sem_post(a2b)
}b()
{
sem_wait(a2b)
//处理
sem_post(b2c)
}c()
{
sem_wait(b2c)
//处理
sem_post(c2d)
}d()
{
sem_wait(c2d)
//处理
}
2.运行方式:A线程接收数据,查看count_A_B,未达到上限则将请求A-B线程锁,数据加入A-B信息交换单链表,释放锁,通过信号量A-B启动B
3.B-C同A-B
4.C-D同A-B