是否可以通过" pthread_mutex_lock"来阻止主要功能?

时间:2014-03-31 09:56:35

标签: c multithreading mutex

我想在一个线程中运行一个函数(在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 );

}

我期待能够等待主要条件。但我想这不太可能。或者是吗?

感谢。

1 个答案:

答案 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将被调用太多次以递增信号量计数器太多次)。