`
把酒泯恩仇
  • 浏览: 26436 次
  • 性别: 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多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

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

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

    秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    《秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据》 http://blog.csdn.net/morewindows/article/details/8646902 配套程序 在《秒杀多线程系列》的前十五篇中介绍多线程的相关概念,多线程同步互斥...

    多线程经典面试题和答案

    常见的多线程经典面试题和答案,包含了面试中常见了多线程问题。

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

    该文档是我总结的c++笔试面试通常会问的一些问题。另外可以从我的资源目录下找c++数据结构与算法,c++笔试面试基础两部分材料,综合这三个材料一起看,我相信大家一定尽快找到工作。

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

    各大公司校招笔试面试多线程和并发历年真题总结,总共上百页吧。其他类目可以查看我上传的资源

    Java多线程程序案例

    Java多线程程序案例,很有帮助,很有用

    经典嵌入式笔试题

    经典嵌入式笔试题 8. 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个...

    Java笔试题大全

    Java多线程常见面试题 31 Java企业面试题整理集合(1) 34 Java企业面试题整理集合(2) 43 Java企业面试题整理集合(3) 55 Java企业面试题整理集合(4) 62 Java企业面试题整理集合(5) 74 Java企业面试题整理集合(6) 85 ...

    多线程经典例子

    一个经典多线程调用,挂起,把怎样应用多线程讲述的很清楚.

    多线程案例,多线程教程

    教会你怎么用多线程。有多线程的案例,线程案例,多线程下载源代码Gdownload_V2.0

    多线程案例

    介绍多线程同步的基础知识 首先我要提一点,关于线程的基础知识,一个程序,即一个进程,可以有很多个线程,当然,至少要有一个线程,即主线程.相信大家都知道多线程的好处吧,举个书上的例子 吧,Windows在复制文件的时候,有...

    多线程面试题

    多线程面试题

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

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

    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多线程例子,希望多大家有帮助

    多线程,多线程面试题,C#源码.zip

    多线程,多线程面试题,C#源码.zip

    线程经典案例

    线程这一知识点一直是困扰大家学习java的一个难点。此处笔者提供了其两个经典案例——生产者与消费者、同步两个操作者取钱问题的代码。供大家参考

Global site tag (gtag.js) - Google Analytics