|
8#

楼主 |
发表于 20-5-2009 01:27:05
|
只看该作者
高级2. Do not use new and delete for txes!
To create memory
- T* new_memory()T* new_memory_copy(T const &rhs)
复制代码
To destroy memory
高级3:before_retry
- atomic(<tx>) { <compound> }before_retry { <compound> }
复制代码
作用:一旦tx第一次提交失败,会自动重试,before_retry的代码块会在tx重试前执行,一般用来做cleanning up,改变tx的优先级等。
如:
template <typename C> bool algo::move
(C &l1, C &l2, C::node_type const &v)
{
bool r = false;
atomic(t) {
if (l1.lookup(v) && !l2.lookup(v))
{
l1.remove(v); l2.insert(v); r = true;
}
} before_retry { r = false; }
return r;
}
高级4:tx不支持reference!
a bad idea
- native_trans<int> &x = t.w(X);
复制代码
an even worse idea!
- native_trans<int> &x = t.r(X);
复制代码
不过可以使用read_ptr和write_ptr代替:
- boost::stm::read_ptr(transaction &t, T)boost::stm::write_ptr(transaction &t, T)
复制代码
至于不能使用reference的原因,主要是直接的reference无法处理atomic嵌套的情况,而read_ptr,write_ptr把transaction也作为参数传递过去了,这样如果嵌套使用,则可以自动检测出来。
|
|