Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой вопрос по многопоточке 
:(
    Опции темы
1cko
Дата 31.3.2010, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



   Все доброго времени суток. Есть простой вопрос касающийся многопоточности. Пишу прогу на шарпе, но ни разу с потоками неработал. вопрос следующий...

Есть собственный класс, у которого есть открытое свойство (public). В основном потоке приложения создаю экземпляр этого класса и по некторым событиям читаю (только читаю!) это свойство. Параллельно с основным потоком работает второй поток, который изменяет данное свойство.

Вопрос: правильно ли я понимаю, что при реализации такого взаимодействия не нужно заботиться о "локах" и т.п.? Ведь нет конкуренции на запись!

Заранее спасибо.
PM MAIL   Вверх
mrbrooks
Дата 31.3.2010, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Если просто читаешь - то нет, но 
Цитата(1cko @  31.3.2010,  07:02 Найти цитируемый пост)
Параллельно с основным потоком работает второй поток, который изменяет данное свойство.

здесь уже необходима синхронизация потоков. это классическая модель. на форуме, в гугле и соответствующей литературе есть масса примеров.
PM MAIL   Вверх
1cko
Дата 31.3.2010, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



Цитата(mrbrooks @ 31.3.2010,  07:32)

здесь уже необходима синхронизация потоков.

т.е. если у меня всего 2 потока, один читает второй пишет, то их нужно обязательно синхронизировать?

Уточнение: что произойдет раньше: чтение или запись - для алгоритма значения не имеет
PM MAIL   Вверх
mrbrooks
Дата 31.3.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(1cko @  31.3.2010,  08:56 Найти цитируемый пост)
т.е. если у меня всего 2 потока, один читает второй пишет, то их нужно обязательно синхронизировать?

совершенно верно
PM MAIL   Вверх
1cko
Дата 31.3.2010, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



для чего? 
PM MAIL   Вверх
PashaPash
Дата 31.3.2010, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



1cko, какой тип у свойства? Как реализованы геттеры и сеттеры? Есть ли значение по умолчанию?


--------------------
PM MAIL WWW   Вверх
1cko
Дата 31.3.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



проясните плз ситуацию.

Добавлено @ 12:18
Цитата(PashaPash @ 31.3.2010,  10:30)
1cko, какой тип у свойства? Как реализованы геттеры и сеттеры? Есть ли значение по умолчанию?

тип - double, тип видимости - public (если вы об этом). По умолчанию будет 0

Это сообщение отредактировал(а) 1cko - 31.3.2010, 12:18
PM MAIL   Вверх
PashaPash
Дата 31.3.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



1cko, чтение и запись double, насколько я помню, - неатомарная операция. т.е. один поток может записать "половину" значения, и в этот момент его прочитает второй поток. сделай синхронизацию вроде
Код

        private static double field;
        private static object fieldLockObj = new object();
        public static double SomeProp 
        {
            get
            {
                lock (fieldLockObj)
                {
                    return field;
                }
            }
            set
            {
                lock (fieldLockObj)
                {
                    field = value;
                }
            }
        }



--------------------
PM MAIL WWW   Вверх
1cko
Дата 1.4.2010, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 18.2.2010

Репутация: нет
Всего: нет



Цитата(PashaPash @ 31.3.2010,  13:35)
1cko, чтение и запись double, насколько я помню, - неатомарная операция. т.е. один поток может записать "половину" значения, и в этот момент его прочитает второй поток. сделай синхронизацию вроде
Код

        private static double field;
        private static object fieldLockObj = new object();
        public static double SomeProp 
        {
            get
            {
                lock (fieldLockObj)
                {
                    return field;
                }
            }
            set
            {
                lock (fieldLockObj)
                {
                    field = value;
                }
            }
        }

Огромное спасибо! Реально такого примера очень не хватало!
PM MAIL   Вверх
HalkaR
Дата 1.4.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



1cko, на самом деле lock для такого примера не нужен. Достаточно пометить поле как volatile.
PM MAIL   Вверх
PashaPash
Дата 1.4.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(HalkaR @  1.4.2010,  11:26 Найти цитируемый пост)
1cko, на самом деле lock для такого примера не нужен. Достаточно пометить поле как volatile. 

Да, вот только на самом деле нельзя пометить поле типа double как volatile smile


--------------------
PM MAIL WWW   Вверх
HalkaR
Дата 1.4.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 5
Всего: 42



Цитата(PashaPash @ 1.4.2010,  16:03)
Цитата(HalkaR @  1.4.2010,  11:26 Найти цитируемый пост)
1cko, на самом деле lock для такого примера не нужен. Достаточно пометить поле как volatile. 

Да, вот только на самом деле нельзя пометить поле типа double как volatile smile

Туплю  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.