Вопрос по lock(object)

ZSharp

Client
Регистрация
29.09.2013
Сообщения
395
Благодарностей
126
Баллы
43
Всем привет.
Кто хорошо знает C#, объясните плиз.
Может кто-то сталкивался с таким вопросом?

Блокировка файла для многопотока
Code:
public static object lockFile1 = new object();
public static object lockFile2 = new object();
public static object lockFile3 = new object();

lock (lockFile1)
{ some code File1 }

lock (lockFile2)
{ some code File2 }

lock (lockFile3)
{ some code File3 }
А можно ли передавать имя объекта lock в переменной?
То есть вот так

Code:
public static object lockFile1 = new object();
public static object lockFile2 = new object();
public static object lockFile3 = new object();

string nameLock = "lockFile1";

lock (nameLock)
{ some code File1 }

nameLock = "lockFile2";

lock (nameLock)
{ some code File2 }

nameLock = "lockFile3";

lock (nameLock)
{ some code File3 }
Проверить я проверил, код работает, но вот блокируются ли файлы на самом деле не могу понять.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
ммм... а у вас как с программированием вообще ? понятие объект , класс что нибудь говорит ?

от того что вы объявили переменную nameLock типа string и присвоили ей значение "lockFile1" она ни каким боком не превратилась в объект типа файл.
поэтому таким образом лочится только локальная переменная , которая и так никому не доступна кроме этой процедуры.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
string nameLock = "lockFile1"; lock (nameLock)
Нет, так если и работает, то только благодаря оптимизации строковых в среде выполнения:
В особенности избегайте использования следующих объектов в качестве объектов блокировки:
строковых экземпляров, включая строковые литералы, так как они могут быть интернированы.
т.е. для разных Thread'ов, объект должен быть один, а значит static, желательно readonly. В случае со строковыми самое надёжное - константы.
Списки/таблицы зенки можно блочить ими же.
 
  • Спасибо
Реакции: ZSharp

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
272
Баллы
63

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)