`
把酒泯恩仇
  • 浏览: 27170 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

多线程经典案例【迅雷笔试题】

阅读更多

原文浏览:

http://www.ibaiyang.org/2011/08/31/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BB%8F%E5%85%B8%E6%A1%88%E4%BE%8B/

 

最近在网上看到迅雷笔试出的一道题,对于初学多线程的童鞋一定会有更多的体会,先分享给大家,其中不乏一些多线程的技术,我相信看了这个代码你一定会有很多心得,我当初就是,嘿嘿……..

#include <stdio.h>
#include <stdlib.h>
#include <eerror.h>
#include <pthread.h>
#define GROUP_COUNT 100
#define GROUP_SIZE 4
typedef struct {
	pthread_mutex_t mutex;
	pthread_cond_t cond;
	int index;
} syn_obj_t;



syn_obj_t syn_obj = {PTHREAD_MUTEX_INITIALIZER,
                     PTHREAD_COND_INITIALIZER, 0
                    };
typedef struct {
	int flag;
} elem_t;
void *
thread_routine(void *arg);
int
main(int argc, char** argv) {
	elem_t elems[GROUP_SIZE];
	pthread_t pds[GROUP_SIZE];
	int i;
	printf("syn_obj.index = %d\n", syn_obj.index);
	for (i = 0; i < GROUP_SIZE; i++) {
		elems[i].flag = i;
		if ( (pthread_create(&pds[i], NULL, thread_routine, &elems[i])) != 0 ) {
			perror("pthread create");
			exit(-1);
		}
	}  
	for (i = 0; i &lt; GROUP_SIZE; i++) {
		pthread_join(pds[i], NULL);
	}
	pthread_mutex_destroy(&syn_obj.mutex);
	pthread_cond_destroy(&syn_obj.cond);
	printf("\nsyn_obj.index = %d\n", syn_obj.index);
	return 0;
}
void *
thread_routine(void *arg) {
	elem_t *elem = (elem_t *)arg;
	int i;
	for (i = 0; i < GROUP_COUNT; i++) {
		pthread_mutex_lock(&syn_obj.mutex);
		while ( (syn_obj.index % GROUP_SIZE) != elem->flag ) {
			pthread_cond_wait(&syn_obj.cond, &syn_obj.mutex);
		}
		printf("%d", elem->flag);
		if ( 0 == (syn_obj.index+1) % GROUP_SIZE ) {
			printf("\t");
		}
		syn_obj.index++;
		pthread_cond_broadcast(&syn_obj.cond);
// may be cause deadlock
// pthread_cond_signal(&syn_obj.cond);
		pthread_mutex_unlock(&syn_obj.mutex);
// sleep(1);
	}
	return NULL;
}

这个多线程实现的功能可以做到多线程中经常使用的模型 客户/生产模型,所以能够学到很多,这个代码的结果是
连续打印ABCABCABC….

 

-----------------打造高质量的文章 更多关注 把酒泯恩仇---------------

为了打造高质量的文章,请  推荐  一下吧。。。。谢谢了,请关注我后续的文章,会更精彩哦

请关注sina微博:http://weibo.com/baiyang26

把酒泯恩仇官方博客:http://www.ibaiyang.org 【推荐用google reader订阅】

把酒泯恩仇官方豆瓣:http://www.douban.com/people/baiyang26/

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

 

1
2
分享到:
评论

相关推荐

    java多线程经典案例

    本案例将深入探讨Java多线程中的关键知识点,包括线程同步、线程通信和线程阻塞。 线程同步是为了防止多个线程同时访问共享资源,导致数据不一致。Java提供了多种同步机制,如synchronized关键字、Lock接口...

    迅雷笔试题汇总整理(较全)

    这份“迅雷笔试题汇总整理”涵盖了多种IT领域的知识,旨在测试应聘者的综合素质和技术能力。以下是对这些知识点的详细解析: 1. **计算机网络**:迅雷的核心业务涉及网络传输,因此,网络基础知识是必不可少的,...

    多线程网络下载 经典案例源代码

    HttpClient多线程网络下载 经典案例源代码

    迅雷校园招聘笔试题

    【迅雷校园招聘笔试题】涉及的范围广泛,主要涵盖了计算机基础知识、网络技术、操作系统、数据结构与算法、软件工程等多个领域。以下是根据题目标题和描述可能涉及的一些知识点的详细说明: 1. 计算机基础知识:这...

    各大公司校招笔试面试多线程和并发历年真题总结

    尤其是在校招笔试面试中,对于理解多线程和并发的真题,往往是衡量一个程序员专业水平的重要指标。本文将详细探讨多线程和并发中的一些重要知识点,包括缓存一致性问题、volatile关键字的内存语义等,这些内容在各大...

    c++笔试面试之网络和多线程

    在C++笔试面试中,网络和多线程是两个经常被提及的重要知识点。本篇文档详细列举了关于网络部分的面试题目,同时也涉及了与多线程相关的TCP/IP协议栈的建立和断开过程。以下为详细的知识点总结: 1. TCP服务创建...

    数字马力笔试题.docx

    本文总结了数字马力的笔试题,涵盖了软件测试岗位的简历筛选笔试题,涉及到了接口自动化测试、Java/Python 实现多线程的方法等知识点。 接口自动化测试 在软件测试中,接口自动化测试是一个重要的环节。它可以帮助...

    多线程终极案例程序(多线程进阶)

    这个“多线程终极案例程序”旨在帮助Java开发者深化对多线程的理解,通过一个具体的“多兵种联合攻击防御塔”游戏案例来实践。下面将详细解释该案例中的关键知识点。 首先,多线程是并发执行多个任务的能力,可以...

    线程经典案例

    本案例中,我们将深入探讨两个经典线程问题——“生产者与消费者”模型和“同步两个操作者取钱问题”。 首先,我们来看“生产者与消费者”问题。这个问题是多线程编程中的一个典型应用场景,模拟了实际生产流水线的...

    Java面试笔试题大汇总(最全+详细答案)

    Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...

    Java 多线程访问的经典例子.txt

    Java 多线程访问的经典例子,一个个代码 手动敲出,可以加深或理解 多线程访问 线程安全与同步的问题.

    农行Java笔试题

    【标题】"农行Java笔试题"涉及到的Java知识点涵盖了编程基础、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个领域,这些都是Java程序员必须掌握的核心技能。 首先,从编程基础角度来...

    4399-游戏开发笔试题

    理解并熟练运用这些语言的特性,如内存管理、异常处理和多线程,将有助于解答相关题目。 二、图形学与物理引擎 游戏画面的呈现与物体运动的模拟是游戏开发的核心部分。考生需要了解OpenGL、DirectX等图形库的使用,...

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    C#面试题 包括 ADO.net 多线程等

    C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等

    Java笔试题大集合及答案(另附各大公司笔试题)

    Java作为一门广泛使用的编程语言,其笔试题涵盖了基础语法、数据结构、算法、多线程、网络编程、设计模式等多个方面。本资料集合了大量Java笔试题,旨在帮助求职者全面复习并准备Java相关的笔试环节,同时包含了各大...

    VB 多线程模块案例

    本案例"VB 多线程模块"着重于展示如何在VB中创建和管理多线程,以实现并发操作。 首先,VB中的多线程主要依赖于`System.Threading`命名空间,该命名空间提供了多种类来支持线程的创建和管理。其中,`Thread`类是...

    java多线程的一个简单例子

    很简单的一个java多线程例子,希望多大家有帮助

    Qt笔试题总结

    **Qt笔试题总结** Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面应用、嵌入式系统和移动设备。它提供了丰富的API,让开发者能够方便地创建美观且功能强大的用户界面。本总结将针对Qt笔试题中的...

Global site tag (gtag.js) - Google Analytics