- 论坛徽章:
- 1
|
//程序名: cond.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
static int s_arg[10];
static pthread_mutex_t s_mutex[10];
static pthread_cond_t s_cond[10];
void * fun(void *arg)
{
int i = *((int *)arg);
pthread_detach(pthread_self());
printf("pthread %d is run\r\n", i);
for( ; ; ) {
printf("wait signal for %d\r\n", i);
pthread_cond_wait(s_cond + i, s_mutex +i);
printf("recv signal %d OK\r\n", i);
}
pthread_exit(NULL);
}
int main(int argc, char *argv)
{
int i;
int count = 10;
pthread_t tid;
//INIT
for(i = 0; i < count; i++) {
s_arg[i] = i;
pthread_mutex_init(s_mutex + i, NULL);
pthread_cond_init(s_cond + i, NULL);
}
//CREATE THREADS
for(i = 0; i < count; i++) {
pthread_create(&tid, NULL, fun, s_arg + i);
}
//
usleep(100000);
//
pthread_cond_signal(s_cond + 5);
pthread_cond_signal(s_cond + 0);
sleep(2);
return(0);
}
[[i] 本帖最后由 safedead 于 2009-2-11 17:59 编辑 [/i]] |
|