Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 11:35   #1
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию Атомарный доступ к разделяемому ресурсу

Здравстуйте, уважаемые форумчане. Такой вопрос назрел.

Код:
//Глобальная переменная
private Decimal var_gloval;
//используем для атомарного доступа
private Object locker=new Object();


//Этот код выполняет первый поток
///////////////////////////////
string number="12.25";
lock(locker)
{
var_global=Decimal.Parse(number);
}
//////////////////////////////


//Этот код выполняет второй поток
////////////////////////////////
//Вспомогательная перменная
decimal temp_decimal_var;
lock(locker)
{
temp_decimal_var=var_global;
}
//Пишем в БД значение глобальной переменной
StoreToDB(temp_decimal_var);
////////////////////////////////
Гарантирует ли такой код атомарность записи(чтения) в(из) переменную(ой)

var_global значения из двух разных потоков?
Т.е. не возможна ли такая ситуация, что к примеру первый поток успеет записать

только целую часть в глобальную переменную var_global, затем планировщик

потоков переключит контекст на выполнение второго потока и в итоге в базу

запишется значение var_global, в котором в дробной части будет содержаться

предыдущее значение переменной, до её изменения первым потоком?

Последний раз редактировалось TELEPUZ; 19.03.2014 в 11:42.
TELEPUZ вне форума Ответить с цитированием
Старый 19.03.2014, 11:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в зачем по вашему lock нужен?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.03.2014, 11:39   #3
TELEPUZ
Пользователь
 
Регистрация: 20.01.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в зачем по вашему lock нужен?
Ну в общем я думаю, что для этого и нужен. Но я просто в примерах видел, что потоки обращаются к одной и той же функции, в которой работают с общей переменной и там использовался локер. А вот что будет, если потоки будут работать с этой глобальной переменной в разных методах? То же самое? Lock будет гарантировать атомарный доступ к переменной?
TELEPUZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приивязка данных к Статичному ресурсу inmyacid WPF, UWP, WinRT, XAML 7 27.03.2013 17:24
Получить доступ MyXa C# (си шарп) 4 03.10.2012 08:10
Как ограничить доступ к интернет ресурсу (сайте Одноклассники) LIK44 Помощь студентам 15 20.12.2011 10:39
Доступ Ko$ Общие вопросы Delphi 7 28.10.2011 16:09
Авторизация NTLM для доступа к интранет-ресурсу (http). Евгений Буторин Работа с сетью в Delphi 0 01.03.2007 14:14