假設我正在運行N個線程。 每個線程需要與下一個和前一個線程同步。3by3線程同步:如何避免開銷
for (i = 0 ; i < NITER; i++){
do_something();
sync_with_neighbours (tId - 1, tId + 1);
}
我需要以最有效的方式實現同步。 Pthread障礙效率不高,因爲每個線程都會等待最慢的線程到達屏障。
任何想法將受到歡迎
編輯:
不,我們不必等待線程0:
如果這些2個鄰居線程, 「我+ 1」 和「i - 1「,準備好然後線程」我「將運行。
比方說,我們在時間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