Fragment kodu:
#ifdef USE_THREAD
thread th[ThreadCount];
#endif
for(unsigned t=0;t<ThreadCount;++t)
{
#ifdef USE_THREAD
th[t]=thread
(
[t]
#endif
{
for(unsigned y=t;y<ColumnCount;y+=ThreadCount)
{
for(unsigned p=0;p<PairCount;++p)
{
double add=0,*tcy=TC[p][y];
for(unsigned x=0;x<ColumnCount;++x)
{
add+=tcy[x]*TR[p][x];
}
for(unsigned s=0;s<ResultCount;++s)
{
TY[s][y][p]+=add*(SV[s+DeadCount+ForwardCount].X[p]-SV[s+DeadCount].X[p]);
}
}
}
}
#ifdef USE_THREAD
);
#endif
}
++RowCount;
#ifdef USE_THREAD
for(unsigned t=0;t<ThreadCount;++t) th[t].join();
#endif
Bez wątków działa to poprawnie, z wątkami zaś po jakimś czasie wyburacza się.
Pytanie - które zdanie jest poprawne?:
- Eksperymentalny std::thread od MinGW ma jakiegoś buga.
- Ja czegoś nie rozumiem.
Zdaje sobie sprawę że w gruncie rzeczy oba zdania poprawne, ale to bez związku z powyższym kodem.