我正在编写一个使用多线程模拟人和电梯的程序。有一个电梯和多个人乘坐电梯。
到目前为止,我试图为每个人创建一个线程,为电梯创建一个线程。然而,人们需要等待电梯被创建,然后他们才能开始他们的行动,而电梯需要等待所有的人在它开始移动之前被创建。
我查看了pthread_join(),但它似乎等待线程完成,这不是我想要的。
发布于 2018-11-02 22:20:40
你可以用障碍。
来自. pthread =‘pthread 3’>的p线程教程的p线程屏障部分。
线程可以参与一个屏障,以同步到某个时间点。屏障对象被初始化为互斥变量或条件变量,但有一个额外的参数count。count变量定义了必须加入屏障才能达到完成的线程数,并解除阻塞所有等待在屏障处的线程。
换句话说,您可以使用n创建一个屏障,任何调用pthread_barrier_wait的线程都将等待n调用pthread_barrier_wait。
下面是一个简单的示例,在此示例中,所有三个线程都将在“任何线程打印”之后“之前”打印“。
#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");
}运行代码这里
https://stackoverflow.com/questions/53125648
复制相似问题