В настоящее время я играю с Intel TSX (расширения синхронизации транзакций), которые доступны на новых чипах Intel Haswell, и я думал о том, как правильно передавать сигналы между различными потоками. Я попытался использовать переменную условия 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
}