lock
От: Аноним  
Дата: 20.09.04 13:54
Оценка:
Как залочить переменную типа bool ?

bool m_myBool = false;

lock(m_myBool)
{
...
}

компилятор выдает сл. ошибку :

'bool' is not a reference type as required by the lock statement
Re: lock
От: Аноним  
Дата: 20.09.04 14:10
Оценка: -1 :)))
Здравствуйте, Аноним, Вы писали:

А>Как залочить переменную типа bool ?


А>bool m_myBool = false;


А>lock(m_myBool)

А>{
А> ...
А>}

А>компилятор выдает сл. ошибку :


А>'bool' is not a reference type as required by the lock statement



pravil'no kompilyator govorit. Poprobui System.Boolean.
Re[2]: lock
От: Anatoly22  
Дата: 20.09.04 14:17
Оценка:
не работает.

А>pravil'no kompilyator govorit. Poprobui System.Boolean.
Re[3]: lock
От: rayluke Россия  
Дата: 20.09.04 14:21
Оценка: -2 :)
Здравствуйте, Anatoly22, Вы писали:

A>не работает.


А>>pravil'no kompilyator govorit. Poprobui System.Boolean.


bool b = true;
lock((object)b) 
{
    b = false;
}
Re[4]: lock
От: Аноним  
Дата: 20.09.04 14:24
Оценка:
Здравствуйте, rayluke, Вы писали:

R>
R>bool b = true;
R>lock((object)b) 
R>{
R>    b = false;
R>}
R>


А суть куда? Каждая нить будет боксить, а потом лочить собственную копию b. Не катит.
Re[4]: lock
От: rayluke Россия  
Дата: 20.09.04 14:25
Оценка:
Здравствуйте, rayluke, Вы писали:

R>Здравствуйте, Anatoly22, Вы писали:


A>>не работает.


А>>>pravil'no kompilyator govorit. Poprobui System.Boolean.


R>
R>bool b = true;
R>lock((object)b) 
R>{
R>    b = false;
R>}
R>


Но я так понимаю, каждый раз будет создавать временный объект?
Re[5]: lock
От: rayluke Россия  
Дата: 20.09.04 14:27
Оценка:
Ага Надо вместо
bool b = true;
писать
object b = true;
и всё.
Re[4]: lock
От: GarryIV  
Дата: 20.09.04 14:29
Оценка:
Hello, rayluke!

r> Здравствуйте, Anatoly22, Вы писали:


A>> не работает.


А>>> pravil'no kompilyator govorit. Poprobui System.Boolean.


r>
 r> bool b = true;
 r> lock((object)b) 
 r> {
 r>  b = false;
 r> }
 r>


Так работать не будет. Лочится то временный объект.

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re: lock
От: Mink Россия  
Дата: 20.09.04 14:29
Оценка: 3 (1) -1
Здравствуйте, Аноним, Вы писали:

А>Как залочить переменную типа bool ?


А>bool m_myBool = false;


А>lock(m_myBool)

А>{
А> ...
А>}

А>компилятор выдает сл. ошибку :


А>'bool' is not a reference type as required by the lock statement


У вэлью типов отсутствует SyncBlockIndex, который используется lock.
А зачем тебе ее лочить?

Если тебе нужно потокобезопасно поменять ее значение, то используй Interlocked
Сила, она в ньютонах
Re[5]: lock
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.09.04 18:25
Оценка: +1 :)
Здравствуйте, GarryIV, Вы писали:

GIV>Так работать не будет. Лочится то временный объект.


А еще очень правильно лочиться на локальной переменной.
... << RSDN@Home 1.1.4 beta 3 rev. 187>>
AVK Blog
Re[6]: lock
От: GarryIV  
Дата: 20.09.04 19:59
Оценка:
Hello, AndrewVK!

GIV>> Так работать не будет. Лочится то временный объект.


A> А еще очень правильно лочиться на локальной переменной.


Угу. Это я тоже заметил но счел, что это просто пример такой неудачный...

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re[2]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 23:31
Оценка: :)
Здравствуйте, <Аноним>, Вы писали:

А>pravil'no kompilyator govorit. Poprobui System.Boolean.


Не, лучше попробовать сменить работу.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 23:31
Оценка: +2
Здравствуйте, rayluke, Вы писали:

R>Ага Надо вместо
bool b = true;
писать
object b = true;
и всё.


А зачем вообще блокировать доступ к локальной переменной?


Может вам всем (автора вопроса и отвечальников) пойти книжками умными запастись?
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 23:31
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Угу. Это я тоже заметил но счел, что это просто пример такой неудачный...


Не, пример как раз очень удачный. Сразу выдает полное непонимание сути и задач блокировки.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 23:31
Оценка:
Здравствуйте, Mink, Вы писали:

M>Если тебе нужно потокобезопасно поменять ее значение, то используй Interlocked


Если нужно потокобезопасно поменять ее значение, то.................... нужно просто смело менять ее без всяких бессмысленных выкрутасов. Это локальная переменная влью-типа... А значит она размещается в стэке потока... А значит каждый поток будет иметь ее отдельную копию... А значит блокировки бессмысленны.

ЗЫ

Не ожидал такой кучи некомпетентных ответов, на такой простой вопрос.
По сути правильно ответил только АВК, но и тот больше посмеялся.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: lock
От: Mink Россия  
Дата: 21.09.04 06:26
Оценка: 18 (1)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Mink, Вы писали:


M>>Если тебе нужно потокобезопасно поменять ее значение, то используй Interlocked


VD>Если нужно потокобезопасно поменять ее значение, то.................... нужно просто смело менять ее без всяких бессмысленных выкрутасов. Это локальная переменная влью-типа...


Может и да, а может и нет. Обычно префиксом m_ все таки обозначают мемберы классов. И никто не говорил, что этот мембер не статический. Я не думаю что здесь привели рабочий вариант в качестве примера.

VD>А значит она размещается в стэке потока... А значит каждый поток будет иметь ее отдельную копию... А значит блокировки бессмысленны.


VD>ЗЫ


VD>Не ожидал такой кучи некомпетентных ответов, на такой простой вопрос.

VD>По сути правильно ответил только АВК, но и тот больше посмеялся.

А зачем вообще нужен класс Interlocked, если с вэлью типами все так шоколадно?
Сила, она в ньютонах
Re[8]: lock
От: GarryIV  
Дата: 21.09.04 07:43
Оценка: :)
Hello, VladD2!

GIV>> Угу. Это я тоже заметил но счел, что это просто пример такой

GIV>> неудачный...

V> Не, пример как раз очень удачный. Сразу выдает полное непонимание сути и

V> задач блокировки.

Ну чтож раз два человека с приставкой rsdn говорят, что аноним собрался лочить локальную переменную так тому и быть

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re[3]: lock
От: vladserge Россия  
Дата: 21.09.04 12:01
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Не ожидал такой кучи некомпетентных ответов, на такой простой вопрос.


почему Вы уверены в том что ситуация преведеного фрагмента (псевдо)кода


bool m_myBool = false;

lock(m_myBool)
{
... 
}



выглядит именно так

public void Method()
{

   bool m_myBool = false;


}


а не иначе, например так


bool m_myBool = false;

public void Method()
{

   

}
С Уважением Сергей Чикирев
Re[4]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 18:21
Оценка: :)
Здравствуйте, Mink, Вы писали:

M>Может и да, а может и нет. Обычно префиксом m_ все таки обозначают мемберы классов. И никто не говорил, что этот мембер не статический. Я не думаю что здесь привели рабочий вариант в качестве примера.


Ну, тогда пример явно не очень корректный. Нужно было бы хотя бы три точки поствить. А лучше все же хоть какую функцию написать, или коментарий.

M>А зачем вообще нужен класс Interlocked, если с вэлью типами все так шоколадно?


Уж точно не для работы с булевыми типами. Там как минимум нет ни одного метода для этого типа.

Да и Interlocked это работа без блокировок. Гарантируется только атомарность операций. Если требуются блокировки, то оне совсем не подходит.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: lock
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 18:21
Оценка: -1
Здравствуйте, vladserge, Вы писали:

Потому что он так написан.

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

Да и в любом случае Interlocked для булева типа никак не применим.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.