使用Posix信号量同步线程

时间:2015-05-10 20:01:52

标签: c multithreading

您好我正在尝试制作3个可以多次打印不同消息的线程。然后同步它们,所以打印例如一个两个三个一个两个三个一个两个......当我运行程序有时它是不正确的我不知道我做错了什么。

  sem_t sema, semb, semc;


void *printone(void *arg) 
{
  printf("<ONE>");
  sem_wait(&semc);
  sem_post(&semb);
}

void *printtwo(void *arg) 
{
  printf("<TWO>");
  sem_wait(&sema);
  sem_post(&semc);
}

void *printthree(void *arg) 
{
  printf("<THREE>");
  sem_wait(&semb);
  sem_post(&sema);
}

main() 

{
  pthread_t th1,th2,th3;
  int i;

    sem_init(&sema,0,1);
    sem_init(&semb,0,0);
    sem_init(&semc,0,0);

  for(i=0;i<10;i++){

    pthread_create( &th1, NULL, printone, (void *) 1); 
    pthread_create( &th2, NULL, printtwo, (void *) 2); 
    pthread_create( &th3, NULL, printthree, (void *) 3); 

    pthread_join(th1, NULL);
    pthread_join(th2, NULL);
    pthread_join(th3, NULL);
  }



  pthread_exit(NULL);

}

0 个答案:

没有答案