标签: pthread-barriers

如何使用pthreads屏障?

嗨很抱歉发布了一大堆代码,但我是C代码的新手,基本上我正在做大学的任务,我必须实现一个"pthread_barrier",现在我理解了障碍的概念(或者在至少我认为我这样做但是我只是不确定我应该把它放在哪里.作业说明:

"使用pthread_barrier_init和pthread_barrier_wait确保所有生产者/消费者线程同时开始生产/消费."

顺便说一下,这是作业的额外学分

#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

#define SIXTY_SECONDS 60000000
#define ONE_SECOND 1000000
#define RANGE 10
#define PERIOD 2

typedef struct {
  int *carpark;
  int capacity;
  int occupied;
  int nextin;
  int nextout;
  int cars_in;
  int cars_out;
  pthread_mutex_t lock;
  pthread_cond_t space;
  pthread_cond_t car;
  pthread_barrier_t bar;
} cp_t;

/* Our producer threads will each execute this function */
static void *
producer(void *cp_in)
{    
  cp_t *cp;
  unsigned int seed;
  /* Convert what was passed in to a pointer …
Run Code Online (Sandbox Code Playgroud)

c linux pthread-barriers

6
推荐指数
1
解决办法
2万
查看次数

未知类型名称“pthread_barrier_t”

我正在尝试用 C 并行化一个算法。我想使用pthread_barrier_t,但我的 Ubuntu wsl 由于某种原因找不到它。我已经pthread.h包含了并且可以使用其余的 pthread 函数。libthread.a已安装。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/* Error occurs here */
pthread_barrier_t barrier;
Run Code Online (Sandbox Code Playgroud)

确切的错误是:“标识符 pthread_barrier_t 未定义”

我在其他地方看到这可能是我编译的方式。

编译如下:

gcc -o test test.c -Wall -std=c99 -lpthread -lm
Run Code Online (Sandbox Code Playgroud)

另外,VS Code 无法识别该函数。

c pthreads pthread-barriers windows-subsystem-for-linux

6
推荐指数
1
解决办法
8128
查看次数