gpt4 book ai didi

C/POSIX- pthread_t 阻塞直到任务完成

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:18 26 4
gpt4 key购买 nike

我有一组 pthreads,它们都需要完成一个任务,然后阻塞直到最后一个完成任务,然后让它们都转到下一个任务。许多任务都会发生这种情况。

我正在考虑有一个计数器,它在每个任务开始时开始等于线程数,并且当每个线程完成一个任务时,它会使用互斥锁安全地递减它,直到最后一个线程将它设为零。在任务结束时,除最后一个完成的线程外,所有线程都将调用 pthread_cond_wait,最后一个线程将调用 pthread_cond_broadcast 以告知其他线程进入下一个任务。然后最后一个线程不会等待,而是继续执行此任务。

但是,我还有一个问题。无法保证倒数第二个递减计数器的线程会在最后一个线程调用 pthread_cond_broadcast 之前调用 pthread_cond_wait。

在 C 和 POSIX 中有什么方法可以安全地处理这个问题吗?

最佳答案

您正在寻找的工具是障碍。

用等待到达它的线程数初始化屏障:

pthread_barrier_init(&barrier, NULL, N);

然后,每个线程调用:

pthread_barrier_wait(&barrier);

等待会阻塞,直到有 N 个线程在等待它,然后所有 N 个线程都在从等待调用返回之前(概念上)醒来。

关于C/POSIX- pthread_t 阻塞直到任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668000/

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