C# энергозависимые объекты массива?

Интересно, ComboBox с DropDownStyle=Simple имеет в значительной степени точно поведение, которое Вы ищете, я думаю.

(При сокращении высоты управления для не показа списка - и затем на более несколько пикселей - нет никакого эффективного различия между ComboBox и TextBox.)

14
задан DxCK 11 December 2009 в 10:18
поделиться

2 ответа

Поскольку можно передавать элементы массива по ссылке, вы можете использовать Thread.VolatileRead и Thread.VolatileWrite .

Это полезно чтобы понять, что ключевое слово volatile работает «за кулисами», используя Thread.MemoryBarrier . Вы можете написать:

// Read
x = _arr[i];
Thread.MemoryBarrier();

// Write
Thread.MemoryBarrier();
_arr[i] = x;

Обратите внимание, что volatile и MemoryBarrier - это продвинутые методы, в которых легко ошибиться. Например, см. Как понять барьеры чтения и энергозависимости памяти . Обычно лучше подходят конструкции более высокого уровня, такие как lock , Monitor , ReaderWriterLockSlim и другие.

8
ответ дан 1 December 2019 в 14:44
поделиться

Я не думаю, что вы можете

Вы не можете, volatile определен как модификатор поля (ECMA 334).

И я тоже не думаю, что вы добьетесь того, чего хотите.
Подумайте:

 private T[] _arr;

 volatile T v;
 ....  v = _arr[x];
 ....  _arr[x] = v;
1
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: