多线程(在多核机器上)进入临界区的时间怎么缩短

剑影 2010-06-06 07:25:19
两根线程写同一个文件的不同部分,各写一半。
写文件的ofstream是全局变量,即两个线程共用一个ofstream。
写文件前先加密数据,使用ofstream时进入临界区,再写文件。

但在这种情况下,双线程的效率反而不如一个线程的。
检查发现进入临界区用了很多时间,
用一个线程时进入临界区的时间为0,而用双线和的话,进入时间花了数十毫秒的样子。

计算时间用的是GetTickCount(),过会考虑用QueryPerformanceCounter()试试。
不过这不是主要问题,问题很明显就是在进入临界区花了太多时间。

进入临界区用的是EnterCriticalSection();
...全文
182 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑影 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 budtang 的回复:]
这不是EnterCriticalSection() 耗不耗时的问题, 是你写一个文件时是互斥访问的, 也就是说同一时间只有一个线程在执行文件写操作, 两个线程只能互斥的写文件。 你看到的进入临界区花很多时间, 不是EnterCriticalSection函数真的需要花这么多时间, 而是进入前它要等待同步锁解锁。
[/Quote]
嗯,这个问题我知道,
我的设想是一个在写文件一个在加密,这样合理利用时间,是不会等那么久的,
而在我的电脑上写文件占了整个过程相当大的部分,加密的过程基本可以忽略,
也就是可说是一直是一个线程在等另一个。。
眼泪哗啦哗啦。。
budweiser 2010-06-06
  • 打赏
  • 举报
回复
这不是EnterCriticalSection() 耗不耗时的问题, 是你写一个文件时是互斥访问的, 也就是说同一时间只有一个线程在执行文件写操作, 两个线程只能互斥的写文件。 你看到的进入临界区花很多时间, 不是EnterCriticalSection函数真的需要花这么多时间, 而是进入前它要等待同步锁解锁。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧