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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование lock 
V
    Опции темы
nmn
Дата 6.1.2009, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не совсем понимаю назначение obj в lock(obj)
объясните  smile 

Это сообщение отредактировал(а) nmn - 6.1.2009, 02:06
PM Skype   Вверх
Partizan
Дата 6.1.2009, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



nmn, это объект синхронизации...

lock пытается его заблокировать...
если не получилось, то значит объект уже кем-то заблокирован, и надо подождать его освобождения..


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
nmn
Дата 6.1.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



т.е. такая запись навсегда заблокирует поток?
Код

lock (this) { lock (this) { } }

PM Skype   Вверх
HalkaR
Дата 6.1.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



nmn, нет, в lock есть обработка такой ситуации. Там используется счетчик входов и выходов.
PM MAIL   Вверх
nmn
Дата 6.1.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что за счетчик? можно поподробнее?
PM Skype   Вверх
HalkaR
Дата 6.1.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Самый обычный счетчик - сколько раз залочили переменную, сколько раз разлочили. Если равно, то все свободны.
PM MAIL   Вверх
nmn
Дата 14.1.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



влияет ли lock на что то кроме того что при встрече lock в другом потоке, тот приостанавливается до разблокирования объекта?
PM Skype   Вверх
mihryak
Дата 15.1.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(nmn @  15.1.2009,  00:55 Найти цитируемый пост)
влияет ли lock на что то кроме того что при встрече lock в другом потоке, тот приостанавливается до разблокирования объекта? 

подразумевается ведь, что там лочится тот же объект? тогда по сути - нет, лок - это синаксический сахар над Monitor
ну и на скорость немного влияет
Цитата(nmn @  6.1.2009,  15:54 Найти цитируемый пост)
т.е. такая запись навсегда заблокирует поток?
Выделить всёкод C#
1: lock (this) { lock (this) { } }

такая запись грозит суровым разговором с начальством
this лочить нельзя

PM MAIL ICQ   Вверх
QryStaL
Дата 15.1.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


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

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



Цитата(nmn @  6.1.2009,  14:54 Найти цитируемый пост)
т.е. такая запись навсегда заблокирует поток?

Присоединюсь к мнению, что this лочить нельзя. А по поводу вопроса - нет, не заблокирует, так как там стоит счетчик входов в lock. Когда он становится равным 0, объект освобождается.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
Skynin
Дата 16.1.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

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



lock - это спрятанный Monitor.Enter(myObj)
Конец блока lock (или return, continue из него) - это Monitor.Exit(myObj)

Методы статические, то есть в недрах класса Monitor хранится список заблокированных объектов.

Когда поток запрашивает Monitor.Enter(myObj) то Monitor остановит выполнение если для myObj где либо не было сделано Monitor.Exit(myObj)

this лочить - можно. Но опастно, потому что если снаружи залочить объект, то внутри него все локи тоже заблокируются, Monitor то статический класс.

Например

Код

class OneClass {

void M1() {

lock (this) { // Monitor.Enter(this)
...
if (...) return; // Monitor.Exit(this)
...
} // Monitor.Exit(this)

}

}

void M2() {

lock (this) { // Monitor.Enter(this)
...
} // Monitor.Exit(this)

}

}

class GlobClass {
void GG(OneClass lOne) {

lock (lOne) { // Monitor.Enter(lOne)

lOne.M1(); // "висим", потому что там внутри lock на тот же lOne

} // Monitor.Exit(lOne)

}
}


PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
mihryak
Дата 16.1.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Skynin @  16.1.2009,  11:59 Найти цитируемый пост)
this лочить - можно

ещё "можно" писать код с хаками, хардкодить, копи-пастить, подавлять все исключения, т.п. - компилятор слова не скажет
но молчание компилятора - это ведь ни фига не индульгенция, разве нет?
PM MAIL ICQ   Вверх
Skynin
Дата 16.1.2009, 17:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

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



Цитата

ещё "можно"

Я просто не люблю слово - нельзя.

Цитата

но молчание компилятора - это ведь ни фига не индульгенция, разве нет?

"Простые люди соблюдают законы из страха. Философы соблюдают эти же законы из понимания их необходимости" (Сократ, по памяти).

Я и попытался вместо запугивания "нельзя" показать почему не стоит хотя можно.

Правила форума нарушил? Где-то в моем постинге обман?

Это сообщение отредактировал(а) Skynin - 16.1.2009, 17:50
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
mihryak
Дата 16.1.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Skynin @  16.1.2009,  18:50 Найти цитируемый пост)
Я и попытался вместо запугивания "нельзя" показать почему не стоит хотя можно.
Правила форума нарушил? Где-то в моем постинге обман?

Что-то я не в духе, извини, вовсе не хотел, чтобы мои слова так прочитались.

PM MAIL ICQ   Вверх
HalkaR
Дата 16.1.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



mihryak,  Skynin, "вы что такие серьезные?" (Джокер, по памяти).
Расслабьтесь - все же поняли идею.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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