abstract class Foo
{
private List<Object> container;
private bool update;
Foo Foo()
{
container = new List<object>();
update = false;
}
public abstract Bar CreateBar();
public void BeginUpdate()
{
if (!update)
{
Thread update_thread = new Thread(new ThreadStart(Update));
update_thread.Start();
}
}
private void Update()
{
update = true;
while (update)
{
lock (container)
{
if (...)
container.Add(this.CreateBar());
else
container.Remove(...);
}
Thread.Sleep(1337);
}
}
public void EndUpdate()
{
update = false;
}
public List<Object> Objects
{
get
{
lock (container)
{
return this.container;
}
}
}
}
Quand quelque chose en dehors de Foo appelle l'accesseur de l'objet Foo comme,Comment le verrouillage se comportera-t-il dans .net?
List<Objects> objects = foo_instance.Objects;
foreach (Object o in objects)
{
Thread.Sleep(31173);
}
Comment se produira le verrouillage? Est-ce que le thread qui exécute Update() doit attendre que le foreach ci-dessus ait fini de traiter la liste des objets? Je voudrais que ces deux travaillent simultanément, est la seule solution pour faire une copie profonde des objets?
Merci, bon aperçu. Je devais vous donner une cerise verbale puisque je ne peux pas voter. ;> –