`
deepfuture
  • 浏览: 4341249 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79518
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68578
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101725
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281686
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14653
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65846
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31406
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45320
社区版块
存档分类
最新评论

c-简单多线程(委托模型)

阅读更多

委托模型,即有一个BOSS线程,就是主线程,产生woker线程,boss线程和worker线程并发执行。

BOSS线程的主要任务是创建worker线程,将工作线程放入队列中,当有工作可处理时,唤醒 工作线程。

/* Create a new thread, starting with execution of START-ROUTINE getting passed ARG. Creation attributed come from ATTR. The new handle is stored in *NEWTHREAD. */

extern int pthread_create (pthread_t *__restrict __newthread,

__const pthread_attr_t *__restrict __attr,

void *(*__start_routine) (void *),

void *__restrict __arg) __THROW __nonnull ((1, 3));

/* Obtain the identifier of the current thread. */

extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__));

//返回调用该函数的当前线程的pthread_t结构指针

/* Make calling thread wait for termination of the thread TH. The

exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN

is not NULL.

This function is a cancellation point and therefore not marked with

__THROW. */

extern int pthread_join (pthread_t __th, void **__thread_return);//__thread_return退出状态

//pthread_join导致调用线程挂起它的执行,直到目标线程的结束。

main.c

#include <pthread.h>

#include <stdio.h>

 //2个工作线程,分别是累加和累乘

void *mycompadd(void *xx){//参数必须为void *,然后进行强制类型转换

  int sum=0; 

  int *x=(int *)(xx);

  for (int i=0;i<*x;i++){

    sum+=i;

  }

  printf("add%d\n",sum);    

}

void  *mycompchen(void *xx){//参数必须为void *,然后进行强制类型转换

  int sum=1; 

  int *x=(int *)(xx);

  for (int i=1;i<=*x;i++){

    sum*=i;  

  }

  printf("chen%d\n",sum);   

}

 

 

int main(){

  //main为boss线程,

  pthread_t threada,threadb;

  //创建worker线程,并执行线程

  int n=3;

  pthread_create(&threada,NULL,mycompadd,&n);//线程,线程属性,函数,参数。如果有多个参数,必须传结构指针

  pthread_create(&threadb,NULL,mycompchen,&n);//线程,线程属性,函数,参数

  //wait worker线程,并合并到BOSS线程来

  pthread_join(threada,NULL);

  pthread_join(threadb,NULL);

  return(0);

}

深未来技术原创文章,如转载,请注明来源http://deepfuture.iteye.com/ 

执行效果:
deepfuture@deepfuture-laptop:~/mytest$ gcc -lpthread -std=c99 -o main main.c
deepfuture@deepfuture-laptop:~/mytest$ ./main
add3
chen6
deepfuture@deepfuture-laptop:~/mytest$ 

2
0
分享到:
评论

相关推荐

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │ 高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │ 高并发编程第一阶段28讲、...

    NET组件程序设计 第2版中文版.part3.rar )

    第8章:多线程和并发管理 线程和多线程 组件和线程 使用线程 同步线程 自动同步 手动同步 WorkerThread包装类 同步委托 使用.NET多线程服务 第9章:序列化和持久化 自动序列化 序列化格式器 序列化事件 序列化和流 ...

    uml统一建模试卷,期末考试复习资料

    Statopia公司所使用的系统是很久以前开发的,且不是用OO方法开发的,该系统非常复杂,而且系统使用多线程来处理公司中并发的业务请求。由于系统开发出来后经过多次修改,因此最初的系统开发文档已经过时。ObjectR...

    tflite_flutter_plugin:TensorFlow Lite Flutter插件

    使用多线程和委托支持进行加速。 与TensorFlow Lite Java API类似的结构。 推理速度接近使用Java API构建的本机Android应用程序。 您可以通过本地构建二进制文件来选择使用任何TensorFlow版本。 在不同的隔离中...

    Redrock-Final-exam

    模拟器请选择:iPhone SE2 雷德洛克最终考试 1.APP简介 仿写知乎日报 2.APP构成板块,开发思路 1.主界面:横幅+酒吧+新闻...2.假期里面跟着b站里面的视频,边学边做,基本把OC的所有东西都会了,UI快了,多线程和网络

    java核心面试

    多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的装载是由ClassLoader和它的子类来实现...

    java核心面试技术点

    多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的装载是由ClassLoader和它的子类来实现...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    【设计】java高级程序设计期末复习题.docx

    Java使用事件委托处理模型来处理事件,源东西和监听东西可以是同一个东西。( T ) 29. JDBC是指Java程序与数据库连接的一种机制。( T ) 30.可以给一个面板添加框架。(F ) 31. File类提供实现文件读写的操作方法。 ...

    YXQueue:适用于iOS的OOP和轻松使用作业队列

    使用它,开发人员将不会太在意线程管理,而只是关注如何创建作业和实现委托。建筑学YXQueueDispatcher 它被设计为所有YXQueue的调度程序。 它为所有作业维护NSOperationQueue 。 YXQueueJob 您可以将作业理解为操作...

    java编程基础,应用与实例

    14.3 多线程 208 14.4 线程的优先级 210 14.5 线程的休眠与唤醒 211 14.6 线程让步 213 14.7 线程同步 214 14.7.1 同步块 216 14.7.2 同步化方法 219 14.7.3 生产者与消费者 221 14.7.4 多消费者 ...

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

Global site tag (gtag.js) - Google Analytics