d****f 发帖数: 313 | 1 工作中牵涉到一个稍微复杂一点的线程同步问题,问题描述如下:
有两个thread:t1和t2
1、t1做N个时间步,t2做一个时间步(都是差分时间步),换句话说每个t2和N个t1同步
2、同步时,t1和t2要交换一下数据,t1先传1个链表tL1给t2,t2用这个tL1算两个链表
值(DataProcess),tL2a,tL2b,一个要回传给t1(tL2a,之后t1的N步都要用到这个tL2a
),另一个tL2b是t2下一步自己计算要用到的,这个过程是串行(原来并行的强制串行
).
3、交换完数据,t1和t2各自完成自己时间步计算,这个过程中t1做一个积分(N步),
t2解一个方程,无论哪个先完成,都需要等到双方都完成了,才能开始下一轮的计算(
也就是回到2),这个过程是并行的.
我贴了一个简单的框架,只是保证t1做一步,t2做一步,因为刚开始接触并行内容,所
以请各位大牛指点一下,这个每轮先串行后并行的过程如何实现,比如是不是需要两个
mutex,两个condition variable,等等,希望我已经描述清楚了, 谢谢!
//------------------------------ | t****t 发帖数: 6806 | 2 for t1 and t2 waiting each other, use pthread_barrier_t. see pthread
document.
同步
tL2a
【在 d****f 的大作中提到】 : 工作中牵涉到一个稍微复杂一点的线程同步问题,问题描述如下: : 有两个thread:t1和t2 : 1、t1做N个时间步,t2做一个时间步(都是差分时间步),换句话说每个t2和N个t1同步 : 2、同步时,t1和t2要交换一下数据,t1先传1个链表tL1给t2,t2用这个tL1算两个链表 : 值(DataProcess),tL2a,tL2b,一个要回传给t1(tL2a,之后t1的N步都要用到这个tL2a : ),另一个tL2b是t2下一步自己计算要用到的,这个过程是串行(原来并行的强制串行 : ). : 3、交换完数据,t1和t2各自完成自己时间步计算,这个过程中t1做一个积分(N步), : t2解一个方程,无论哪个先完成,都需要等到双方都完成了,才能开始下一轮的计算( : 也就是回到2),这个过程是并行的.
| c*******9 发帖数: 6411 | | X****r 发帖数: 3557 | 4 http://bbs.cn.yimg.com/user_img/200804/25/m*****[email protected]_120909245311748
7.jpg
【在 c*******9 的大作中提到】 : who is 多隆?
|
|