Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1082159189
juiceman
2004-04-17 03:46
2004.05.09
Программирование в Delphi глазами хакера (с CD-ROM)


14-1081758739
able
2004-04-12 12:32
2004.05.09
Как убрать ф-цию контроллера домена?


14-1082129497
X9
2004-04-16 19:31
2004.05.09
Assembler


1-1082465220
CraKer
2004-04-20 16:47
2004.05.09
Как заранее подгрузить jpg


1-1082482168
просто Я
2004-04-20 21:29
2004.05.09
ComboBox1.Items.Delete(??????);





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский