我正在为我的项目(Linux,ICC,pthreads)优化一些仪器,并希望对此技术提供一些反馈,为一个线程分配一个唯一的索引,这样我就可以使用它来索引每个线程的数组数据。我可以使用pthreads分配每个线程的索引吗?
旧的技术使用基于pthread id的std :: map,但我想避免锁定和地图查找(如果可能的话)(它会产生大量的开销)。
这是我的新技术:
static PerThreadInfo info[MAX_THREADS]; // shared, each index is per thread
// Allow each thread a unique sequential index, used for indexing into per
// thread data.
1:static size_t GetThreadIndex()
2:{
3: static size_t threadCount = 0;
4: __thread static size_t myThreadIndex = threadCount++;
5: return myThreadIndex;
6:}
在后面的代码:
// add some info per thread, so it can be aggregated globally
info[ GetThreadIndex() ] = MyNewInfo();
所以:
1)它看起来像4号线可能是,如果两个线程的竞争条件在同一时间创建。如果是这样 - 我怎样才能避免这种情况(最好没有锁)?我看不出原子增量会在这里起到什么作用。
2)有没有更好的方法来创建每线程索引莫名其妙?也许通过以某种方式预先生成线程创建的TLS索引?
1)当然,谢谢你清理那个。 2)这是真的 - 但不幸的是我想要从任何线程“读取”信息,定期进行聚合。 – Justicle 2011-04-02 23:12:46