Re[3]: PulsarEvent - позволяющий делать операции в процессе ожидания
От: Caracrist https://1pwd.org/
Дата: 01.10.12 19:07
Оценка:
Здравствуйте, Caracrist, Вы писали:

После замены:
while (m_settingCount && m_waitingCount && (m_setIndex == prevIndex))

на
while (m_settingCount && (m_setIndex == prevIndex))

замерил ещё один параметр: cpu time
для 20 потоков за минуту работы(на 8 логических):
CRITICAL_SECTION: 0
SpinMutex: 8 минут
SmartSpinMutex: 5 минут

Однако поскольку это время тратится с минимальным приоритетом, то я запустил параллельно в программе ещё 20 потоков вот такого содержания:
DWORD WINAPI Work(void *)
{    
    while(1)
    {
        _InterlockedIncrement64(&wrk);
    }
}

и замерил сколько они успевают сделать работы
после done, каждые десять секунд:

printf("%d set %I64d done %I64d\n", GetCurrentThreadId(), cnt, wrk);


  результаты
CRITICAL_SECTION:
6100 set 3635791 done 865967975
6100 set 6694219 done 1730704524
6100 set 10623651 done 2591867287
6100 set 13566810 done 3459369466
6100 set 16742211 done 4325375554
6100 set 19955911 done 5191390141

SpinMutex:
4384 set 215330 done 872795371
4384 set 792636 done 1742500158
4384 set 1513333 done 2612406125
4384 set 2106909 done 3479599717
4384 set 2760201 done 4349449513
4384 set 3339203 done 5219177745

SmartSpinMutex:
3336 set 99395 done 784914987
3336 set 207087 done 1653246893
3336 set 339514 done 2521517183
3336 set 384181 done 3389750134
3336 set 473368 done 4257453598
3336 set 534001 done 5125593331

Вывод к моему сожалению прост:
игра не стоит свечь...
~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.