//四个线程输出ABCD
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THRNUM 4
static int num;
static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
static int next(int n)
{
if(n+1 == THRNUM)
return 0;
return n+1;
}
static void *thr_func(void *p)
{
int n = (int)p;
int c = 'A'+n;
while(1)
{
pthread_mutex_lock(&mut);
while(num != n)
pthread_cond_wait(&cond,&mut);
write(1,&c,1);
num = next(num);
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mut);
}
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
int i,err;
pthread_t tid[THRNUM];
for(i=0;i<THRNUM;i++)
{
// pthread_mutex_init(mut+i,NULL);
// pthread_mutex_lock(mut+i)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THRNUM 4
static int num;
static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
static int next(int n)
{
if(n+1 == THRNUM)
return 0;
return n+1;
}
static void *thr_func(void *p)
{
int n = (int)p;
int c = 'A'+n;
while(1)
{
pthread_mutex_lock(&mut);
while(num != n)
pthread_cond_wait(&cond,&mut);
write(1,&c,1);
num = next(num);
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mut);
}
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
int i,err;
pthread_t tid[THRNUM];
for(i=0;i<THRNUM;i++)
{
// pthread_mutex_init(mut+i,NULL);
// pthread_mutex_lock(mut+i)