ошибка: ожидаемые спецификаторы объявления или «...» перед числовой константой int sem_init (sem_t * s, 0, unsigned int val); - PullRequest
0 голосов
/ 10 мая 2018
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,    void*(*start_routine) (void *), void *arg);

void *thread(void *vargp); 
/* Global shared variable */
volatile long cnt = 0; /* Counter */
sem_t mutex;
int sem_init(sem_t *s,0,unsigned int val);
void P(sem_t *s);
void V(sem_t *s);

int main(int argc, char **argv)
{
  long niters; 
  int i, nthreads;
  pthread_t tid[1000];

  niters = atoi(argv[1]);
  nthreads = atoi(argv[2]);
  for (i=0; i < nthreads; i++)
  {
    sem_init(&mutex,0,1);
    pthread_create(&tid[i], NULL, thread, &niters);
    printf("THREAD %d with tid= %ld CREATED \n", i, tid[i]);
  }
  for (i=0; i < nthreads; i++)
  {
    pthread_join(tid[i], NULL);
    printf("THREAD %d with tid= %ld TERMINATED \n", i, tid[i]);
  }

  /* Check result */
  if (cnt != (nthreads * niters))
    printf("BOOM! cnt=%ld  ---  RACE CONDITION\n", cnt);
  else
    printf("OK cnt=%ld\n", cnt);

  printf("PRESS CTRL-C to terminate or CTRL-Z to suspend \n");
  pause();
  exit(0);
}

/* Thread routine */
void *thread(void *vargp) 
{                                         
   long i, niters =  *((long *)vargp);                                         
   for (i = 0; i < niters; i++)
   {
     P(&mutex);
     cnt++;  
     V(&mutex);                 
   }                                             
   return NULL; 
} 

Я хочу синхронизировать потоки с помощью семафоров, но когда я объявляю функцию sem_init() и задаю средний аргумент 0, это выдает мне ошибку.Может быть, функция неправильная.Я также включил заголовок semaphore.h.

Пожалуйста, предложите решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...