Si tengo algo como esto (pseudocódigo):C operaciones # lista multiproceso
class A
{
List<SomeClass> list;
private void clearList()
{
list = new List<SomeClass>();
}
private void addElement()
{
list.Add(new SomeClass(...));
}
}
es posible que me encuentro con problemas de multiproceso (o cualquier tipo de comportamiento inesperado) cuando ambas funciones se ejecutan en paralelo?
El caso de uso es una lista de errores, que se pueden borrar en cualquier momento (simplemente asignando una nueva lista vacía).
EDIT: Mis suposiciones son
- sólo un hilo añade elementos
- elementos olvidados están bien (es decir, condición de carrera entre la compensación y la adición de un nuevo elemento), siempre que la operación de borrado tiene éxito sin problemas
- .NET 2,0
Solo un hilo está agregando elementos, por lo que el segundo punto no es un problema para mí. Y estaba al tanto de la condición de carrera, pero eso no es realmente importante para mí, pero no estoy llamando 'Clear' en absoluto, sino que estoy creando una nueva lista. ¿Sería un problema llamar 'Clear' y' Add' al mismo tiempo (dijiste 'List' no es seguro para subprocesos)? – AndiDog
Lo siento, quise decir AddElement y ClearList. Solo crear una nueva lista debería estar bien, y si solo está agregando desde un solo hilo, debería estar bien. No olvide que puede haber más complicaciones cuando también está leyendo de la lista: ¿eso solo ocurriría en el mismo hilo que está haciendo el Add? –
No, otro subproceso de GUI debe poder iterar sobre él. Eso se implementará en unas pocas semanas. ¿Esto puede causar problemas si la GUI usa 'foreach (Element e in instanceOfC.list) {...}' - si asigno una nueva 'List' durante esta iteración, la GUI aún funcionará en la lista anterior, ¿no? – AndiDog