1、编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
/* mutex.c */
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
/* 全局变量 */
int gnum = 0;
/* 互斥量 */
pthread_mutex_t mutex;
/* 声明线程运行服务程序. */
static void pthread_func(void*);
pthread_cond_t qready=PTHREAD_COND_INITIALIZER;
int main (void)
{
/*线程的标识符*/
pthread_t pt[3];
int ret = 0;
/* 互斥初始化. */
pthread_mutex_init(&mutex, NULL);
/*分别创建线程1、2*/
for(int i=0;i<3;i++)
{
ret = pthread_create(pt+i, //线程标识符指针
NULL, //默认属性
(void*)pthread_func, //运行函数
i); //无参数
}
pthread_join(pt[0], NULL);
pthread_join(pt[1], NULL);
pthread_join(pt[2], NULL);
return 0;
}
/*线程2的服务程序*/
static void pthread_func(void *arg)
{
int flag = (int)arg;
int i = 0;
for (i=0; i<10; i++) {
pthread_mutex_lock(&mutex); /* 获取互斥锁. */
while(gnum%3 != flag ){
pthread_cond_wait(&qready, &mutex);
}
gnum ++ ;
printf("%c",flag+'A');
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&qready);
}
pthread_exit (NULL);
}