#include <stdio.h>
#include <pthread.h>
#define THREAD_N 3
#define LOOP_M 10
int g_num[THREAD_N];
int g_flag = 0;
pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
void* print_thread(void *arg)
{
int param = (int)arg;
while (g_num[param]--)
{
pthread_mutex_lock(&g_lock);
while (param != g_flag)
{
pthread_cond_wait(&g_cond, &g_lock);
}
printf("%c", 'A' + param);
g_flag = ++g_flag % THREAD_N;
pthread_mutex_unlock(&g_lock);
pthread_cond_broadcast(&g_cond);
}
}
int main()
{
pthread_t pid[THREAD_N];
int i;
for (i = 0; i < THREAD_N; ++i)
{
g_num[i] = LOOP_M;
pthread_create(&pid[i], NULL, print_thread, (void *)i);
}
for (i = 0; i < THREAD_N; ++i)
pthread_join(pid[i], NULL);
return 0;
}
N个线程顺序输出,循环M遍
最新推荐文章于 2024-03-12 11:19:25 发布