假设我正在运行 N 个线程。每个线程都需要与下一个和上一个线程同步。
for (i = 0 ; i < NITER; i++){
do_something ();
sync_with_neighbours (tId - 1, tId + 1);
}
我需要以最有效的方式实现同步。Pthread 屏障效率不高,因为这样每个线程都会等待最慢的线程到达屏障。
欢迎任何想法
编辑:
不,我们不必等待线程 0:
如果这两个相邻线程“i + 1”和“i - 1”准备就绪,则线程“i”将运行。
假设我们在 T 时刻在这种情况下运行 6 个线程:
- th0:待定(运行 iter = m )
- th1:待定(运行 iter = m )
- th2:准备好(等待)
- th3:准备好(等待)
- th4:准备好(等待)
- th5:待定(运行 iter = m )
T + 1 的情况将是:
- th0:待定(运行 iter = m )
- th1:待定(运行 iter = m )
- th2:准备好(等待)
- th3:运行 iter = m + 1
- th4:准备好(等待)
- th5:待定(运行 iter = m )
如您所见,每个人都无需等待 Th0