首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使多个POSIX线程等待另一个线程开始

如何使多个POSIX线程等待另一个线程开始
EN

Stack Overflow用户
提问于 2018-11-02 20:49:01
回答 1查看 858关注 0票数 2

我正在编写一个使用多线程模拟人和电梯的程序。有一个电梯和多个人乘坐电梯。

到目前为止,我试图为每个人创建一个线程,为电梯创建一个线程。然而,人们需要等待电梯被创建,然后他们才能开始他们的行动,而电梯需要等待所有的人在它开始移动之前被创建。

我查看了pthread_join(),但它似乎等待线程完成,这不是我想要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-02 22:20:40

你可以用障碍。

来自. pthread =‘pthread 3’>的p线程教程的p线程屏障部分。

线程可以参与一个屏障,以同步到某个时间点。屏障对象被初始化为互斥变量或条件变量,但有一个额外的参数count。count变量定义了必须加入屏障才能达到完成的线程数,并解除阻塞所有等待在屏障处的线程。

换句话说,您可以使用n创建一个屏障,任何调用pthread_barrier_wait的线程都将等待n调用pthread_barrier_wait

下面是一个简单的示例,在此示例中,所有三个线程都将在“任何线程打印”之后“之前”打印“。

代码语言:javascript
复制
#include <pthread.h>
#include <stdio.h>

pthread_barrier_t barrier; 

void* foo(void* msg) {
    printf("%s: before\n", (char*)msg);

    // No thread will move on until all three threads have reached this point
    pthread_barrier_wait(&barrier);

    printf("%s: after\n", (char*)msg);
}

int main() {

    // Declare three threads
    int count = 3;
    pthread_t person_A, person_B, elevator;

    // Create a barrier that waits for three threads
    pthread_barrier_init(&barrier, NULL, count); 

    // Create three threads
    pthread_create(&person_A, NULL, foo, "personA");
    pthread_create(&person_B, NULL, foo, "personB");
    pthread_create(&elevator, NULL, foo, "elevator");

    pthread_join(person_A, NULL);
    pthread_join(person_B, NULL);
    pthread_join(elevator, NULL);
    printf("end\n");
}

运行代码这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53125648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档