线程互斥和条件同步,pthread_mutex和pthread_cond
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h> //getopt_long()头文件位置
#include <string.h>
#include <unistd.h>
#include <syslog.h>
#include <pthread.h>
void *thread1_function(void *arg);
void *thread2_function(void *arg);
pthread_mutex_t mutex;
pthread_cond_t cond;
int g_value = 0;
int main(int argc, char *argv[])
{
pthread_t thread1,thread2;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
if(pthread_create(&thread1,NULL,thread1_function,NULL))
{
fprintf(stdout,"thread 1 create failed\n");
}
if(pthread_create(&thread2,NULL,thread2_function,NULL))
{
fprintf(stdout,"thread 2 create failed\n");
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
return 0;
}
void *thread1_function(void *arg)
{
char i;
for (i=0; i<9; i++)
{
pthread_mutex_lock(&mutex);
g_value ++;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
sleep(2);
}
return NULL;
}
void *thread2_function(void *arg)
{
char i;
for (i=0; i<9; i++)
{
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);
printf("g_value is: %d\n", g_value);
pthread_mutex_unlock(&mutex);
}
return NULL;
}