Re: О lock-free алгоритмах (+бонус)
От: pif_pif  
Дата: 24.04.11 20:17
Оценка:
Есть подозрение, что этот алгоритм не свободет от data race. Т.е. между этой строкой
intptr_t dif = (intptr_t)seq — (intptr_t)pos;
и этой проверкой
if (dif == 0)
значение pos может быть изменено в другом потоке, и проверка будет не валидной. Intel Parallel Inspector это подтверждает:
ID Description Problem Source Function Module State
X7 Read Data race lockfree.cpp:24 load lockfree.exe Not fixed
X9 Write Data race lockfree.cpp:41 store lockfree.exe Not fixed
X6 Write Data race lockfree.cpp:48 compare_exchange_weak lockfree.exe Not fixed
X8 Allocation site Data race newaop.cpp:7 new[] lockfree.exe Information

Код для теста использовался такой:

tbb_thread* tbbthrd_en[10];
for(int i=0;i<10;i++)
{
tbbthrd_en[i]=new tbb_thread(thrd_en);
}
for(int i=0;i<10;i++)
{
tbbthrd_en[i]->join();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.