Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизTTread + Terminate. Найти похожие ветки
← →
Digitman © (2004-04-18 11:26) [40]
> Игорь Шевченко
а про кэш-арбитр ты почему-то умолчал)
← →
Digitman © (2004-04-18 11:26) [40]
> Игорь Шевченко
а про кэш-арбитр ты почему-то умолчал)
← →
Anatoly Podgoretsky © (2004-04-18 11:35) [41]В данном конкретном примере FTerminated является приватным полем объекта, ни один другой поток не имеет прямого доступа до него. В каком бы контенсте не был вызван метод, сам поток пишет и читает жто поле, к тому же атомарная операция.
← →
Anatoly Podgoretsky © (2004-04-18 11:35) [41]В данном конкретном примере FTerminated является приватным полем объекта, ни один другой поток не имеет прямого доступа до него. В каком бы контенсте не был вызван метод, сам поток пишет и читает жто поле, к тому же атомарная операция.
← →
Verg © (2004-04-18 12:32) [42]
> Игорь Шевченко © (17.04.04 21:21) [38]
> KSergey © (17.04.04 07:10)
> Verg © (17.04.04 13:07)
>
> Вопрос на засыпку: имеется двухпроцессорная система. На
> одном процессе один поток выполняет машинную команду записи
> байта в оперативную память, на другом процессоре другой
> поток в это же время выполняет чтение байта из оперативной
> памяти по этому адресу. Что будет записано и что будет прочитано
> ?
Интереснее другое. Два потока пытаются одновременно инкрементировать ячейку памяти (inc [esi]). Я думаю, что вот тут как раз и будет четко видна разница однопроцессорной от многопроцессорной.
>1 процессора - есть вероятность, что ячейка синкрементируется на единицу, хотя по логике - должна на 2, т.к. между чтением старого значения и записью нового (+1) шина свободна и другой процессор может прочитать старое значение.
Ты это имел ввиду?
вот для этого и пишут lock inc [esi] (InterLockedIncrement).
← →
Verg © (2004-04-18 12:32) [42]
> Игорь Шевченко © (17.04.04 21:21) [38]
> KSergey © (17.04.04 07:10)
> Verg © (17.04.04 13:07)
>
> Вопрос на засыпку: имеется двухпроцессорная система. На
> одном процессе один поток выполняет машинную команду записи
> байта в оперативную память, на другом процессоре другой
> поток в это же время выполняет чтение байта из оперативной
> памяти по этому адресу. Что будет записано и что будет прочитано
> ?
Интереснее другое. Два потока пытаются одновременно инкрементировать ячейку памяти (inc [esi]). Я думаю, что вот тут как раз и будет четко видна разница однопроцессорной от многопроцессорной.
>1 процессора - есть вероятность, что ячейка синкрементируется на единицу, хотя по логике - должна на 2, т.к. между чтением старого значения и записью нового (+1) шина свободна и другой процессор может прочитать старое значение.
Ты это имел ввиду?
вот для этого и пишут lock inc [esi] (InterLockedIncrement).
← →
Verg © (2004-04-18 12:39) [43]
> Что будет записано и что будет прочитано
> > ?
В байте до этого было число Y.
Записано будет то, что первый поток хотел записать (X).
А вот второй поток может причитать и X и Y с вероятностью 50/50.
Правильно?
← →
Verg © (2004-04-18 12:39) [43]
> Что будет записано и что будет прочитано
> > ?
В байте до этого было число Y.
Записано будет то, что первый поток хотел записать (X).
А вот второй поток может причитать и X и Y с вероятностью 50/50.
Правильно?
← →
Master Denis (2004-04-18 19:30) [44]А не проще написать прогу, которая будет только присваиваить скажем $ffffff... а затем тудаже $0000..., а в доп. потоке читать эту переменную.
Если хть раз прочитает что-нить отличное от этих двух значений - значит вполне возможно перекличение между потоками в момент записи части переменнной....
Сейчас пойду писать...
← →
Master Denis (2004-04-18 19:30) [44]А не проще написать прогу, которая будет только присваиваить скажем $ffffff... а затем тудаже $0000..., а в доп. потоке читать эту переменную.
Если хть раз прочитает что-нить отличное от этих двух значений - значит вполне возможно перекличение между потоками в момент записи части переменнной....
Сейчас пойду писать...
← →
Романов Р.В. © (2004-04-19 08:19) [45]Anatoly Podgoretsky © (18.04.04 11:35) [41]
Потрясающая оперативность. Ответ на вопрос спустя 2 суток после этого:
Тимохов © (16.04.04 15:58) [27]
Сим ответом и удовлетворю свой интерес.
Всем спасибо.
Браво...
← →
Романов Р.В. © (2004-04-19 08:19) [45]Anatoly Podgoretsky © (18.04.04 11:35) [41]
Потрясающая оперативность. Ответ на вопрос спустя 2 суток после этого:
Тимохов © (16.04.04 15:58) [27]
Сим ответом и удовлетворю свой интерес.
Всем спасибо.
Браво...
← →
KSergey © (2004-04-19 09:02) [46]> [38] Игорь Шевченко © (17.04.04 21:21)
> Вопрос на засыпку: имеется двухпроцессорная система. На
> одном процессе один поток выполняет машинную команду записи
> байта в оперативную память, на другом процессоре другой
> поток в это же время выполняет чтение байта из оперативной
> памяти по этому адресу. Что будет записано и что будет прочитано?
Каюсь, я не знаю как именно организовываются многопроцессорные системы, однако уверен (во всяком случе сделал бы так, если бы меня допустили ;), что при доступе обоих процессоров к одной ячейке памяти - один и них блокиреутся нафиг до высвобождения оной.
А вот что происходит при работе несколькоих потоков, каждый на своем процессоре, когда один из потоков входит в критическую секцию - это хороший вопрос: пока один процессор - он просто не переключается, а когда более одного? Не блокировать же остальные... Мда, тут я не знаю... Может расскажете?
Но все же мне думается, что не приходится задумываться о том один процессор или несколько в системе, во всяком случае при программировании под готовую OC: в противном случае, уверен, в книгах кроме проблем с потоками упоминались бы еще и проблемы написания кода под многопроцессорные системы, а мне такое не встречалось. Может не те книжки читал?
← →
KSergey © (2004-04-19 09:02) [46]> [38] Игорь Шевченко © (17.04.04 21:21)
> Вопрос на засыпку: имеется двухпроцессорная система. На
> одном процессе один поток выполняет машинную команду записи
> байта в оперативную память, на другом процессоре другой
> поток в это же время выполняет чтение байта из оперативной
> памяти по этому адресу. Что будет записано и что будет прочитано?
Каюсь, я не знаю как именно организовываются многопроцессорные системы, однако уверен (во всяком случе сделал бы так, если бы меня допустили ;), что при доступе обоих процессоров к одной ячейке памяти - один и них блокиреутся нафиг до высвобождения оной.
А вот что происходит при работе несколькоих потоков, каждый на своем процессоре, когда один из потоков входит в критическую секцию - это хороший вопрос: пока один процессор - он просто не переключается, а когда более одного? Не блокировать же остальные... Мда, тут я не знаю... Может расскажете?
Но все же мне думается, что не приходится задумываться о том один процессор или несколько в системе, во всяком случае при программировании под готовую OC: в противном случае, уверен, в книгах кроме проблем с потоками упоминались бы еще и проблемы написания кода под многопроцессорные системы, а мне такое не встречалось. Может не те книжки читал?
← →
Anatoly Podgoretsky © (2004-04-19 09:10) [47]Романов Р.В. © (19.04.04 08:19) [45]
Да какая разница когда, иногда бывают ответы и несколько месяцев спустя.
← →
Anatoly Podgoretsky © (2004-04-19 09:10) [47]Романов Р.В. © (19.04.04 08:19) [45]
Да какая разница когда, иногда бывают ответы и несколько месяцев спустя.
← →
Игорь Шевченко © (2004-04-19 11:59) [48][40] Digitman © (18.04.04 11:26)
:)) Ну вот, такой вопрос был хороший...
Разумеется, при доступе к памяти существует арбиртаж, иначе вся идея многопроцессорных систем с общей памятью была бы нереализуема :)
Verg © (18.04.04 12:39)
Да, разумеется, так и произойдет, первый поток запишет, то, что хотел, второй прочитает содержимое в зависимости от того, кому первому арбитр памяти разрешит доступ к ячейке.
Префикс Lock используется обычно тогда, когда между чтением и модификацией ячейки памяти с памятью не должно проиходить посторонних операций со стороны других компонент аппаратуры, в том числе и другого процессора. Поэтому чаще всего этот префикс использовался с машинной командой xchg, сейчас чаще всего с командой xadd.
← →
Игорь Шевченко © (2004-04-19 11:59) [48][40] Digitman © (18.04.04 11:26)
:)) Ну вот, такой вопрос был хороший...
Разумеется, при доступе к памяти существует арбиртаж, иначе вся идея многопроцессорных систем с общей памятью была бы нереализуема :)
Verg © (18.04.04 12:39)
Да, разумеется, так и произойдет, первый поток запишет, то, что хотел, второй прочитает содержимое в зависимости от того, кому первому арбитр памяти разрешит доступ к ячейке.
Префикс Lock используется обычно тогда, когда между чтением и модификацией ячейки памяти с памятью не должно проиходить посторонних операций со стороны других компонент аппаратуры, в том числе и другого процессора. Поэтому чаще всего этот префикс использовался с машинной командой xchg, сейчас чаще всего с командой xadd.
← →
Тимохов © (2004-04-19 12:08) [49]
> Anatoly Podgoretsky © (18.04.04 11:35) [41]
> В данном конкретном примере FTerminated является приватным
> полем объекта, ни один другой поток не имеет прямого доступа
> до него. В каком бы контенсте не был вызван метод, сам поток
> пишет и читает жто поле, к тому же атомарная операция.
Анатолий.
Что-то странное вы говорите. Какая разница, что поле приватное. Реально читают и пишут то разные потоки.
Скорее всего здесь дело в атамарности.
← →
Тимохов © (2004-04-19 12:08) [49]
> Anatoly Podgoretsky © (18.04.04 11:35) [41]
> В данном конкретном примере FTerminated является приватным
> полем объекта, ни один другой поток не имеет прямого доступа
> до него. В каком бы контенсте не был вызван метод, сам поток
> пишет и читает жто поле, к тому же атомарная операция.
Анатолий.
Что-то странное вы говорите. Какая разница, что поле приватное. Реально читают и пишут то разные потоки.
Скорее всего здесь дело в атамарности.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.038 c