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

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
分享到:
评论

相关推荐

    C多线程编程实战

    在IT行业中,多线程编程是一项关键技能,尤其是在开发高性能、高并发的应用程序时。C#作为微软.NET框架的主要编程语言,提供了强大的多线程支持。本教程将深入探讨C#中的多线程编程,通过丰富的实战案例帮助你理解其...

    .NETC#汇总 -多线程.rar

    除了多线程,C#还提供了异步编程模型(如`async/await`),它基于任务(Task)和异步操作,避免了线程阻塞,提高了程序的响应性。 总结,.NET C#中的多线程编程涉及面广泛,包括线程创建、同步、安全、状态管理和...

    iOS多线程编程指南(中文版)

    ### iOS多线程编程指南(中文版)知识点详解 #### 一、多线程编程概述 **1.1 什么是多线程** 多线程是指在一个应用程序中同时运行多个线程,每个线程都可以独立执行任务。在iOS开发中,多线程能够充分利用设备的...

    使用C#语言进行多线程程序设计

    - **Task Parallel Library(TPL)**:提供了基于任务的并行编程模型,简化了多线程编程。 总之,C#作为一种现代化的编程语言,在.NET框架的支持下,为开发者提供了强大的多线程编程能力。通过理解和掌握C#中的多线程...

    c#多线程编程实战书中例子.zip

    在C#编程中,多线程是一个核心概念,特别是在现代计算环境中,多任务处理和并发执行已经成为提升程序性能的关键技术。本压缩包“c#多线程编程实战书中例子.zip”可能包含了一些实用的示例代码,用于演示如何在C#中...

    类中使用多线程,并在窗体上显示

    这些模型简化了多线程编程,减少了对线程管理的需求,但原理相同,都是利用委托在不同线程间传递信息。 8. **测试代码`testdelegate`**:在`testdelegate`项目中,可能包含了一个示例,演示了如何在类中创建和管理...

    多线程在Visual_Studio_C_的应用实例教程

    ### 多线程在Visual Studio C# 的应用实例教程 #### 一、多线程基础与Visual C# 中的线程管理 多线程技术在软件开发中扮演着至关重要的角色,尤其在需要处理大量并发任务的场景下,如网络编程、数据处理等。在...

    C#多线程编程实例 线程与窗体交互源码.rar

    在C#编程中,多线程是一个核心概念,特别是在开发高效、响应迅速的应用程序时。本实例主要关注如何在C#环境中实现线程与窗体的交互,这在UI更新、后台任务处理等方面非常关键。下面我们将深入探讨相关知识点。 1. *...

    C_threads_events_delegate_instance.rar_delegate_threads_线程委托

    在C#编程中,线程(threads)、事件(events)和委托(delegates)是构建多线程应用程序和实现异步编程的关键概念。本压缩包文件"ydaima"可能包含一些示例代码或教程,旨在帮助理解这些概念在实际应用中的工作方式。...

    C#多线程基础和实例

    首先,我们来看"C_多线程的详细教程.doc"。这个文档可能涵盖了以下几个方面: 1. **线程的创建**:在C#中,可以使用`System.Threading.Thread`类来创建新线程。通过实例化`Thread`对象并传递一个委托作为参数,可以...

    winform 多线程 异步 文件操作(查询、删除) 实例 代码 textbox ComboBox label C#

    本实例主要探讨如何在WinForm应用中利用多线程和异步处理技术进行文件的查询和删除操作,以提升用户体验。我们将通过C#语言实现这一功能,并涉及到TextBox、ComboBox和Label等控件的使用。 1. **异步编程基础** ...

    C_多线程函数如何传参数和返回值[文].pdf

    在多线程上下文中,我们可以创建一个委托实例来封装需要在UI线程中执行的方法,如`OutText`函数。这里的`OutDelegate`是自定义的委托类型,定义了一个接受`string`参数的方法。 调用UI更新方法时,我们使用控件的`...

    C#多线程编程实战.zip

    在C#编程中,多线程技术是一种关键的并发处理机制,它允许程序同时执行多个独立的任务,从而提高系统资源的利用率和程序的响应速度。本实战教程将深入探讨C#中的多线程编程,帮助开发者掌握如何在.NET框架下构建高效...

    浅谈C#多线程简单例子讲解

    在本文中,我们将深入探讨C#中的多线程,并通过一些简单实例进行讲解。 首先,C#提供了对多线程的支持,主要集中在`System.Threading`命名空间下。在编写涉及多线程的代码时,我们需要引入这个命名空间: ```...

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

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

    IOS应用源码——委托代理.rar

    - 在多线程环境中,使用GCD(Grand Central Dispatch)可以确保代理方法在正确的线程上执行,提高应用的性能和响应性。 在“委托代理”这个压缩包中,开发者可能通过具体的代码示例展示了如何创建协议、遵循协议、...

    C#线程运用

    C#线程运用涉及到多线程编程的关键概念和技术,这些技术对于构建高效的并发和并行应用至关重要。下面将详细讨论C#线程的核心知识点。 1. **线程创建**: - 使用`System.Threading.Thread`类可以创建新的线程。通过...

    JVM Specification Third Edition 草稿

    - **并行/并发收集**:通过多线程技术提高垃圾回收效率,减少停顿时间。 - **线程管理**: - **线程创建与销毁**:介绍如何在JVM中创建和销毁线程。 - **线程调度与同步**:阐述线程间的调度机制以及同步机制,...

    Objective-C高级

    "Objective-C高级"的主题涵盖了该语言的高级特性和实践,包括多线程和内存管理等核心概念。以下是对这些主题的详细阐述: 1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,它添加了消息传递机制和类的...

Global site tag (gtag.js) - Google Analytics