Искам да изчакам във функция от нишка (Стартирайте в основната функция), докато се освободи мутекс. Възможно ли е или мютексите могат да се използват само от създадени нишки? Можем ли да действаме като основна нишка? Точно сега ми дава следната грешка:
_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 за отговор № 1Mutex може да се използва от всякакви нишки, където са достъпни (дори различни процеси, ако те са в споделена памет).
Друг подход, използващ семафори, може да бъде следният.
Можете да направите нещо по следния начин, като използвате глобално:
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 ще се нарича твърде много пъти, увеличавайки брояча на семафора много пъти).