/ / Je možné zablokovať hlavnú funkciu cez „pthread_mutex_lock“? - c, multithreading, mutex

Je možné blokovať hlavnú funkciu cez "pthread_mutex_lock"? - c, multithreading, mutex

Chcem čakať vo funkcii mimo vlákna (Beh v hlavnej funkcii), kým sa neuvoľní mutex. Je to možné, alebo môžu byť mutexy použité iba vytvorenými vláknami? Takže sa môžeme správať ako hlavné je vlákno? Práve teraz mi dáva nasledujúcu chybu:

_pthread_mutex_lock: Assertion `mutex->__data.__owner == 0" failed.

Funkcia, ktorú volám v hlavnom:

void SetFrame()
{
pthread_mutex_lock( &Framemutex );
pthread_cond_wait( &Framecondition, &Framemutex );
pthread_mutex_lock( &UsableFrame );
IplImage *UsableFrame=cvCloneImage(Frame);
pthread_mutex_unlock( &UsableFrame );
pthread_mutex_unlock( &Framemutex );

}

Očakával som, že budem môcť čakať na stav v hlavnom. Ale myslím, že to nie je možné. Alebo je to ?

Vďaka.

odpovede:

0 pre odpoveď č. 1

Mutex môže byť použitý všetkými vláknami, kde sú prístupné (dokonca aj rôzne procesy, ak sú v spoločnej pamäti).

Ďalší prístup využívajúci semafory by mohol byť nasledujúci.

Mohli by ste niečo urobiť takto:

sem_t sem;

Na začiatku hlavného, ​​môžete mať (ak zdieľate medzi vláknom, nie proces):

sem_init(&sem, 0, 0); //the counter of the semaphore is init with value 0

Potom v hlavnom:

sem_wait(&sem);

kde chcete, aby hlavný čakal.

Nakoniec, vo svojom vláknovom kóde, keď chcete urobiť hlavný chod, pridáte:

sem_post(&sem);

Všimnite si, že vyššie uvedené funguje iba pre dve vlákna (inak bude sem_post nazývaný príliš mnohokrát prírastkom počítadla semaforov príliš mnohokrát).