免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14041 | 回复: 16

[C] 同时支持 pthread 和 windows thread 的线程池 [复制链接]

论坛徽章:
0
发表于 2008-05-18 21:34 |显示全部楼层
把之前做的基于 pthread 的线程池代码,移植到了 windows 平台。
移植方法是在 windows 平台用 Mutex 和 Event 模拟了 pthread_mutex 和 pthread_cond 类型。
和平台相关的内容统一在一个 spthread.h 中。线程池的实现代码中,就不再需要 ifdef 这种东西了。

实现思路的说明:
Build a thread pool in C

下载
http://spserver.googlecode.com/files/threadpool-0.2.src.tar.gz

[ 本帖最后由 iunknown 于 2008-5-19 14:15 编辑 ]

论坛徽章:
38
2017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:2720周年集字徽章-周	
日期:2022-01-13 15:12:33
发表于 2008-05-18 22:12 |显示全部楼层
怎么那么多人喜欢线程池?

论坛徽章:
0
发表于 2008-05-19 08:56 |显示全部楼层
顶 ............支持

论坛徽章:
0
发表于 2008-05-19 09:28 |显示全部楼层
支持!

论坛徽章:
0
发表于 2008-05-19 10:02 |显示全部楼层
sourceforge.net上不是有pthread_win32的项目吗?把pthread库移植到了Win32平台下,应该是可行的

论坛徽章:
0
发表于 2008-05-19 13:58 |显示全部楼层
原帖由 醉卧水云间 于 2008-5-18 22:12 发表
怎么那么多人喜欢线程池?


在繁忙的服务器上,用和不用线程池,在性能上还是有一些区别的。

论坛徽章:
0
发表于 2008-05-19 13:59 |显示全部楼层
原帖由 xiaomiao 于 2008-5-19 10:02 发表
sourceforge.net上不是有pthread_win32的项目吗?把pthread库移植到了Win32平台下,应该是可行的


一开始就是拿 pthread_win32 这个项目在 windows 下做测试的,后来觉得多了一个依赖,用起来不够方便,因此就尝试改成用 windows 本地的 Thread API 。

论坛徽章:
38
2017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:2720周年集字徽章-周	
日期:2022-01-13 15:12:33
发表于 2008-05-19 14:04 |显示全部楼层
原帖由 iunknown 于 2008-5-19 13:58 发表


在繁忙的服务器上,用和不用线程池,在性能上还是有一些区别的。


那倒是, 在这个版里总看了不下10个线程池了, 轮子太多了, 都不知道用哪个了.

论坛徽章:
0
发表于 2008-05-19 14:12 |显示全部楼层
原帖由 醉卧水云间 于 2008-5-19 14:04 发表


那倒是, 在这个版里总看了不下10个线程池了, 轮子太多了, 都不知道用哪个了.


的确是,在网上找 threadpool 可以找到一大堆。尤其多 c++ 写的,不过通常显得有点复杂。
我现在实现的这个,应该算是相对简单的一个了,用 c 实现的,就三个接口


  1.     typedef void *threadpool;

  2.     typedef void (*dispatch_fn)(void *);

  3.     threadpool create_threadpool(int num_threads_in_pool);

  4.     void dispatch(threadpool from_me, dispatch_fn dispatch_to_here, void *arg);

  5.     void destroy_threadpool(threadpool destroyme);

复制代码


接口定义来源是某个大学的一个作业
http://paul.rutgers.edu/~csgates/CS416/proj2/index.html

论坛徽章:
0
发表于 2008-05-19 14:28 |显示全部楼层
   作业都是这, 那这个大学 可是 挺牛逼的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP