情景1:
Jack开着一辆出租车来到一个网站停车。看见没人就走了。过段时间。Susan来到网站准备乘车。可是没有来,于是就等着。过了一会Mike开着车来到了这个网站,Sunsan就上了Mike的车走了。如图所看到的:
程序实现该情景:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>pthread_cond_t taxicond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t taximutex = PTHREAD_MUTEX_INITIALIZER;void *traveler_arrive(void *name)
{char *p = (char *)name;printf ("Travelr: %s need a taxi now!\n", p);pthread_mutex_lock(&taximutex);pthread_cond_wait(&taxicond, &taximutex);pthread_mutex_unlock(&taximutex);printf ("traveler: %s now got a taxi!\n", p);pthread_exit(NULL);
}void *taxi_arrive(void *name)
{char *p = (char *)name;printf ("Taxi: %s arrives.\n", p);pthread_cond_signal(&taxicond);pthread_exit(NULL);
}int main (int argc, char **argv)
{char *name;pthread_t thread;pthread_attr_t threadattr;pthread_attr_init(&threadattr);name = "Jack";pthread_create(&thread, &threadattr, taxi_arrive, name);sleep(1);name = "Susan";pthread_create(&thread, &threadattr, traveler_arrive, name);sleep(1);name = "Mike";pthread_create(&thread, &threadattr, taxi_arrive, name);sleep(1);return 0;
} /* ----- End of main() ----- */
情景2:
Jack开着一辆出租车来到一个网站停车,看见没人就等着。过段时间,Susan来到网站准备乘车看见了Jack的出租车,于是就上去了。过了一会Mike开着车来到了这个网站,看见没人救等着。
如图所看到的:
程序实现该情景:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>int travelercount = 0;
pthread_cond_t taxicond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t taximutex = PTHREAD_MUTEX_INITIALIZER;void *traveler_arrive(void *name)
{char *p = (char *)name;pthread_mutex_lock(&taximutex);printf ("traveler: %s need a taxi now!\n", p);travelercount++;pthread_cond_wait(&taxicond, &taximutex);pthread_mutex_unlock(&taximutex);printf ("traveler: %s now got a taxi!\n", p);pthread_exit(NULL);
}void *taxi_arrive(void *name)
{char *p = (char *)name;printf ("Taxi: %s arrives.\n", p);for(;;){if(travelercount){pthread_cond_signal(&taxicond);travelercount--;break;}}pthread_exit(NULL);
}int main (int argc, char **argv)
{char *name;pthread_t thread;pthread_attr_t threadattr;pthread_attr_init(&threadattr);name = "Jack";pthread_create(&thread, &threadattr, taxi_arrive, name);sleep(1);name = "Susan";pthread_create(&thread, &threadattr, traveler_arrive, name);sleep(3);name = "Mike";pthread_create(&thread, &threadattr, taxi_arrive, name);sleep(4);return 0;
} /* ----- End of main() ----- */
author: fulinux
E-mail: fulinux@sina.com
blog: blog.csdn.net/fulinus