/ / Възможно ли е да се блокира основната функция чрез "pthread_mutex_lock"? - c, многонишковост, мутекс

Възможно ли е да блокира основната функция чрез "pthread_mutex_lock"? - c, многонишковост, мутекс

Искам да изчакам във функция от нишка (Стартирайте в основната функция), докато се освободи мутекс. Възможно ли е или мютексите могат да се използват само от създадени нишки? Можем ли да действаме като основна нишка? Точно сега ми дава следната грешка:

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

Функцията, която наричам главно:

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 );

}

Очаквах да мога да изчакам състоянието. Но предполагам, че не е възможно. Или е?

Благодаря.

Отговори:

0 за отговор № 1

Mutex може да се използва от всякакви нишки, където са достъпни (дори различни процеси, ако те са в споделена памет).

Друг подход, използващ семафори, може да бъде следният.

Можете да направите нещо по следния начин, като използвате глобално:

sem_t sem;

В началото на основната, може да имате (ако споделяте между нишката, а не процеса):

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

След това в главното:

sem_wait(&sem);

където искате главният да чака.

И накрая, в кода на вашата нишка, когато искате да направите основното изпълнение, добавяте:

sem_post(&sem);

Обърнете внимание, че горното работи само за две нишки (в противен случай sem_post ще се нарича твърде много пъти, увеличавайки брояча на семафора много пъти).