gpt4 book ai didi

c - 是否可以通过 "pthread_mutex_lock"阻止 main 函数?

转载 作者:行者123 更新时间:2023-11-30 17:36:13 26 4
gpt4 key购买 nike

我想在线程外的函数中等待(在主函数中运行),直到释放互斥锁。是否可能,或者互斥体只能由创建的线程使用?那么我们可以把 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 );

}

我期望能够等待 main 中的条件。但我想这不太可能。或者是吗?

谢谢。

最佳答案

互斥体可以被任何可访问的线程使用(甚至是不同的进程,如果它们位于共享内存中)。

使用信号量的另一种方法如下。

您可以使用全局执行以下操作:

sem_t sem;

在主程序的开头,您可以(如果您在线程之间共享,而不是在进程之间共享):

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

然后,在main中:

sem_wait(&sem);

您希望主程序等待的位置。

最后,在线程代码中,当您想让主程序运行时,您可以添加:

sem_post(&sem);

请注意,上述仅适用于两个线程(否则,sem_post 将被调用太多次,从而使信号量计数器递增太多次)。

关于c - 是否可以通过 "pthread_mutex_lock"阻止 main 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com