Bonjour,

J'ai lu la page DVP sur Java et la synchronisation - qui est très bien d'ailleurs. Je rencontre cependant un problème de blocage que la page n'explique pas :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
/* les noms de variables ont été simplifiés, 
 * les fonctions épurées, mais l'essentiel est là
 */
	public void f1()
	{
		if (DEBUG)
			Log.d(TAG, "begins");
		for(int index = 0;index<mInput.size();index++)
		{
			synchronized(mArray)
			{
				mArray.add(mInput.get(index));
			}
		}
 
		if (DEBUG)
			Log.d(TAG, "ends");
	}
 
	public void f2(int value)
	{
		synchronized(mArray)
		{
			for(int index = 0;index<mArray.size();index++)
			{
				if(mArray.get(index)==value)
					mArray.remove(index);
			}
		}
	}
mArray est une simple ArrayList, rien de bloquant dans un add ou un remove. Ces fonctions peuvent être appelées par des threads différents, mais aucun des appelants n'a d'autres verrous que celui-là. Cependant il arrive régulièrement qu'on ait un "begins" sans "ends". Y a-t-il quelque chose qui m'échappe sur la synchronisation ?

Etant donné le contexte de développement, je n'ai pas la possibilité de faire de tests de débug et dois corriger le bug "à vue". Toute idée est la bienvenue

Merci bien !