我目前正在使用较新的 Intel Haswell 芯片上可用的 Intel TSX(事务同步扩展),并且我一直在考虑如何正确地在不同线程之间进行信号传递。我尝试使用 pthread 的条件变量,而事务只是不断中止,这是可以理解的。也就是说,如果当前线程在事务中,是否有人知道任何有效的方法来通知另一个线程唤醒?
void firstThread()
{
if ((status = _xbegin()) == _XBEGIN_STARTED) {
if(someCondition) {
// signal secondThread to wake up
}
}
else {
cerr << "Transaction failed\n";
}
_xend();
}
void secondThread()
{
waitForSignal();
// do something
}