InterlockedIncrement не срабатывает
От: Аноним  
Дата: 17.06.11 07:12
Оценка:
На x64

В одном потоке на нулевом проце в переменную обьявленную

__declspec(align(64)) short volatile GoGoEnd;

записывается "2"

Затем в двух потоках ( на ядре 0 и 1 ) на двуядерном проце делается _InterlockedDecrement16 ( & GoGoEnd );

И затем каждый поток ждет когда переменная облулиться

И цикл продолжается.

Одним словом вот так примерно выглядит

Это код который выполняется на ядрах >= "1"



__declspec(align(64)) short volatile  GoGoEnd;
// на ядрах больше нуля
DWORD WINAPI ThreadProc (  __in  LPVOID lpParameter )
{
    CLASS99 * _this = ( CLASS99 *) lpParameter;

        while ( 1 ){
    
        while ( ! /* _this-> */ GoGoEnd )
            ;
        _this->_DoRuns();
    
        _InterlockedDecrement16 ( & /*_this-> */ GoGoEnd );
 
        while ( /* _this-> */ GoGoEnd ) // цикл 2
            ;

    }
}



Это код который выполняется на ядре "0"

          GoGoEnd = ProcessorCount ;//2

         _DoRuns();

     _InterlockedDecrement16 ( & GoGoEnd ); 

    while ( GoGoEnd ) // цикл 2
        ;


И вот примерно на 1000 прогоне оба потока начинают циклить на цикле 2, значение GoGoEnd равно 1

То есть явно InterlockedDecrement16 не срабатывает

Что делать?
Re: InterlockedIncrement не срабатывает
От: Jolly Roger  
Дата: 17.06.11 07:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И вот примерно на 1000 прогоне оба потока начинают циклить на цикле 2, значение GoGoEnd равно 1


Может она таки равна -1? Или -2...

А>То есть явно InterlockedDecrement16 не срабатывает


А нафига здесь вообще short, который всё равно align(64)? Это даже экономией на спичках не назовёшь

А>Что делать?


"Нормальные герои всегда идут в обход!"
Re[2]: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 17.06.11 07:25
Оценка:
Здравствуйте, Jolly Roger, Вы писали:


А>>И вот примерно на 1000 прогоне оба потока начинают циклить на цикле 2, значение GoGoEnd равно 1


JR>Может она таки равна -1? Или -2...


Как еще написать ? "ОДИН !!!"

А>>То есть явно InterlockedDecrement16 не срабатывает


JR>А нафига здесь вообще short, который всё равно align(64)? Это даже экономией на спичках не назовёшь


Ну и? Чем-то не нравится 16? Именно в этом и есть причина

А>>Что делать?


JR>


Дык
Re: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 17.06.11 07:54
Оценка: -1 :)
Здравствуйте, Аноним, Вы писали:

Ошибку нашел. Все работает.
Re: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 17.06.11 08:00
Оценка:
Тему думаю надо удалить. Чтобы за загрязнять историю.
Re[2]: InterlockedIncrement не срабатывает
От: trophim Россия  
Дата: 17.06.11 19:15
Оценка: 1 (1) +1 :)
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>Ошибку нашел. Все работает.


Вы прослушали выступление мастера кузнечных дел под названием "Всякая куйня"...
В чем ошибка то хоть была?
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Let it be! — Давайте есть пчелу!
Re[3]: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 18.06.11 10:15
Оценка: -4 :)
Здравствуйте, trophim, Вы писали:

T>Здравствуйте, <Аноним>, Вы писали:


А>>Здравствуйте, Аноним, Вы писали:


А>>Ошибку нашел. Все работает.


T>Вы прослушали выступление мастера кузнечных дел под названием "Всякая куйня"...

T>В чем ошибка то хоть была?

Найдите сами. Не найдете потом расскажу. А вообще оно вам надо? Я же сказал — InterlockedIncrement работает. Паника отменяется.
Но если вам не важно обгонять всякие Open MP, то не стоит "решать" где ошибка. А она не очевидна, но зато какой результат.
Re[4]: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 18.06.11 19:08
Оценка:
Здравствуйте, Аноним, Вы писали:

Бессмысленную с целом тему не даляют, но все равно не понятно — что не нравится минусующим? Я же пишу — ошибка была . Все функции работают как положенно — паника отменяется. Я ошибся. И думаю, что вряд ли кому-то интересно и понятно, что там делалось. Я же пишу — тема фуфло и ее надо удалить как ошибочную. Что в этом может не нравится?
Re[5]: InterlockedIncrement не срабатывает
От: wander  
Дата: 18.06.11 20:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Бессмысленную с целом тему не даляют, но все равно не понятно — что не нравится минусующим? Я же пишу — ошибка была . Все функции работают как положенно — паника отменяется. Я ошибся. И думаю, что вряд ли кому-то интересно и понятно, что там делалось. Я же пишу — тема фуфло и ее надо удалить как ошибочную. Что в этом может не нравится?


Я объясню. Ты всех заинтриговал. А потом обломал. Это просто правило хорошего тона поделиться в чем была проблема.

PS. минусов не ставил.
Re[6]: InterlockedIncrement не срабатывает
От: Аноним  
Дата: 19.06.11 07:23
Оценка:
Здравствуйте, wander, Вы писали:

W>Я объясню. Ты всех заинтриговал. А потом обломал. Это просто правило хорошего тона поделиться в чем была проблема.


Ну я думаю, что долго рассказывать. Да и зачем? Я думаю, что тему просто снести и все.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.