我想在一个线程中运行一个函数(在main函数中运行),直到释放一个互斥锁。它是否可能,或者只能由创建的线程使用互斥锁?那么我们可以像主线一样行动吗?现在,它给了我以下错误:
_pthread_mutex_lock: Assertion `mutex->__data.__owner == 0' failed.
我在main中调用的函数:
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 :(得分:0)
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将被调用太多次以递增信号量计数器太多次)。