gpt4 book ai didi

c - 使用 pthread_cond_t 表示执行结束

转载 作者:行者123 更新时间:2023-11-30 15:30:14 25 4
gpt4 key购买 nike

我使用 pthread_cond_t 向主线程发出子线程执行结束的信号。由于我没有同步对共享资源的访问,我想知道包含 pthread_cond_wait 的循环会是什么?这是我所拥有的:

pthread_mutex_t mutex;
pthread_cond_t cond;

int main(int argc, char *argv[])
{
pthread_cond_init(&cond, NULL);
cond = PTHREAD_COND_INITIALIZER;

pthread_create(&tid1, NULL, func1, NULL);
pthread_create(&tid2, NULL, func2, NULL);

pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);

//Join the thread that first completes

}

void *func1(void *arg)
{
....
pthread_cond_signal(&cond);
pthread_exit((void *) 1);
}

void *func2(void *arg)
{
....
pthread_cond_signal(&cond);
pthread_exit((void *) 1);
}

默认情况下,主线程是否会等待,直到 thread1 或 thread2 向其发送信号,或者我们是否需要某种围绕等待的条件循环?

此外,主线程如何在不显式调用 pthread_join 的情况下访问发出信号的线程的退出状态?或者,有没有办法获取发出信号的线程的 thread_id ,以便主线程可以加入它以检索其退出状态?

最佳答案

如果两个线程在主线程到达pthread_cond_wait()之前运行完成,那么它将永远等待。否则,主线程将等待,直到其他线程之一发出信号通知。

不,你不能询问发出信号的条件。

你的pthread条件没有内存;如果在发出信号时没有线程正在等待条件,则不会记住该信号。重要的是您管理的、受互斥体保护的状态。 pthread 条件只是一种允许线程在状态需要时等待的机制。

因此,无论您需要从子线程传递到父线程的任何信息,技巧都是在互斥锁下执行此操作。在这种情况下,您想传递 child 已经完成的事实。也许是一个简单的 bool,所以主线程:

  pthread_mutex_lock(&mutex) ;
while (!t1_done && !t2_done)
pthread_cond_wait(&cond, &mutex) ;
pthread_mutex_unlock(&mutex) ;

并线程第一个:

  pthread_mutex_lock(&mutex) ;
t1_done = true ;
pthread_cond_signal(&cond) ;
pthread_mutex_unlock(&mutex) ;

...一切都非常简单,真的。

关于c - 使用 pthread_cond_t 表示执行结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705116/

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