题目:编写一个程序,开启3个线程,这3个线程的ID分别为A B C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示。
该程序用到POSIX信号量。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
pthread_t pidA,pidB,pidC;
pthread_attr_t attr;
sem_t semA,semB,semC; //信号量,本质上是long int
void *funA(void *arg);
void *funB(void *arg);
void *funC(void *arg);
int main()
{
sem_init(&semA,0,1); //初始化一个信号量,0表示只能为当前进程的所有线程共享,1为信号量的初始值
sem_init(&semB,0,0);
sem_init(&semC,0,0);
pthread_create(&pidA,&attr,funA,(void *)&pidA);
pthread_create(&pidB,&attr,funB,(void *)&pidB);
pthread_create(&pidC,&attr,funC,(void *)&pidC);
pthread_join(pidA,NULL); //以阻塞的形式等待pidA对应的线程结束。当函数返回时,被等待线程的资源被收回
pthread_join(pidB,NULL);
pthread_join(pidC,NULL);
sem_destroy(&semA);
sem_destroy(&semB);
sem_destroy(&sem