Bonjour,

J'ai le problème suivant, j'ai 2 threads qu'on va appeller Thread1(qui est en fait le ThreadUI) et Thread2 dont ce dernier a une boucle while et je voudrais que s'il est en train d'exécuter la boucle courante le thread1 ne puisse pas exécuter un bout de code tant que le while n'a pas fini son iteration courante, cad juste avant de commencer une nouvelle iteration.
Et réciproquement tant que le Thread1 n'a pas fini d'éxécuter son code, que la boucle while soit en attente avant de pouvoir continuer sa prochaine itération

Dans mon thread1 j'ai un truc du genre :

Code :
1
2
3
4
5
6
7
8
9
10
if (update)
        {
           
           // ATTENDRE tant qu'on a pas le lock et prendre le lock
            _margin = getDoublePageMarginForHost([self host], _size.width, _size.height);
            setViewPortForHost([self host], size.width, size.height);
            
            // relacher le lock  
        }
et mon thread2 on a le bout de code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
while(_shouldContinue) { // loop to process requests
            VSLog(@"dequeue and process");
            
            // ATTENDRE tant qu'on a pas le lock et prendre le lock
            [self _dequeueAndProcess];
             // relacher le lock

            VSLog(@"dequeue and process next");
        }
Donc d'après ce que je comprends j'aurais besoin de NSCondition donc j'ai commencé a faire une classe singleton :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@interface NLThreadLocker : NSObject
{
    //pthread_mutex_t    _mutex;
    //NSLock * _lock;
    
    NSConditionLock *  _condLock;
    BOOL _canLock;
}

@property NSConditionLock *condition;
@property BOOL canLock;

+ (NLThreadLocker *)sharedLocker;
Mais ensuite je ne vois pas trop comment architecturer la suite, est ce que si je déclare 2 methodes lock et unlock ca peut le faire et je ne vois pas trop l'implementation.