免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: iunknown
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2008-05-19 19:58 |只看该作者
原帖由 qingfengjianke 于 2008-5-19 14:28 发表
   作业都是这, 那这个大学 可是 挺牛逼的,


真正按它的要求写一个完整的实现出来,对于理解线程的工作原理,还是很有作用的。

论坛徽章:
0
12 [报告]
发表于 2008-05-19 22:16 |只看该作者
说几点:
1、win32提供的mutex属于递归锁,与pthread提供的mutex不同。但后者可以通过在建立时改变其属性来实现递归锁。跨平台的库应注意尽量保证功能上的一致性。
2、win32提供的event机制本身已经实现了线程的排队机制,不需要通过mutex来进行同步。
3、win32的event是通过kernel object实现的,可以保证每一个SetEvent都会被某个线程接收;pthread的条件变量机制只能实现通知,并不能保证一定有线程能够接收到。实现时要注意这些区别。

论坛徽章:
0
13 [报告]
发表于 2008-05-19 22:31 |只看该作者
轮子造了无数, 我也造过了。

我的意见是不要用线程池,线程自己切换就可以了。

论坛徽章:
0
14 [报告]
发表于 2008-05-20 09:51 |只看该作者
原帖由 marxn 于 2008-5-19 22:16 发表
说几点:
1、win32提供的mutex属于递归锁,与pthread提供的mutex不同。但后者可以通过在建立时改变其属性来实现递归锁。跨平台的库应注意尽量保证功能上的一致性。
2、win32提供的event机制本身已经实现了线程的排队机制,不需要通过mutex来进行同步。
3、win32的event是通过kernel object实现的,可以保证每一个SetEvent都会被某个线程接收;pthread的条件变量机制只能实现通知,并不能保证一定有线程能够接收到。实现时要注意这些区别。


多谢指点。

这个库的目标是提供一个方便使用的跨平台的 线程池 的实现,而并不是提供一个完整的跨平台的 线程库。
在 Windows 平台,这个库模拟 pthread 实现的 线程 API 仅仅是在线程池的实现中要用到的那部分。

一般跨平台的移植,通常有 3 种做法
1.以 A 平台的接口为准,在 B 平台上模拟出 A 平台的接口
2.反过来,以 B 平台的接口为准,在 A 平台上模拟出 B 平台的接口
3.自定义一套接口,分别在 A 和 B 平台上实现

在这次的移植中,是以 pthread 的接口为准,用 Windows Thread 来模拟 pthread 的接口。

论坛徽章:
0
15 [报告]
发表于 2008-05-20 09:55 |只看该作者
原帖由 im2web 于 2008-5-19 22:31 发表
轮子造了无数, 我也造过了。

我的意见是不要用线程池,线程自己切换就可以了。


线程池里面的线程大多数时候也是自己切换的啊。

使用线程池的一个比较典型的例子是目前 mysql 的实现。mysql 目前是采取 one_thread_per_connection 的模型的。
如果不用线程池,那么每当有一个连接上来的时候,mysql 就创建一个线程,等这个连接被关掉的时候,线程就退出。
但目前 mysql 采用的方法是使用一个线程池。

论坛徽章:
0
16 [报告]
发表于 2008-05-20 14:36 |只看该作者

回复 #14 iunknown 的帖子

呵呵,其实还有一种选择:既不实现A平台的全部接口,也不实现B平台的全部接口。而是取A平台和B平台的交集。尽量使用最少的平台接口可以提高程序的可移植性。
某些平台提供的一些接口在另一个平台实现起来比较困难,或者实现以后效率太低。因此可以不去实现,而用其他方法代替。例如,win32通过内核对象的机制提供mutex、semaphore、event等机制,因此这些机制可以用于跨进程的线程同步,但在posix平台上这一点就比较弱。还有pthread的rwlock机制,在win32下实现就比较困难。我查阅了网上的一些代码,都不能避免thread starvation的问题(或者哪位牛人使用win32实现了比较高效的rwlock,请赐教,呵呵)。

论坛徽章:
0
17 [报告]
发表于 2011-04-24 02:14 |只看该作者
这处得好好研究下了,好象不怎么会用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP