[root@localhost tcpip]# cat ./mutex.c
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#define NUM_THREAD 100
void *thread_inc(void *arg);
void *thread_des(void *arg);
long long num=0;
pthread_mutex_t mutex;
int main(int argc, char *argv[]){
pthread_t thread_id[NUM_THREAD];
int i;
pthread_mutex_init(&mutex, NULL);
for(i=0; i<NUM_THREAD; i++)
{
if(i%2){
pthread_create(&(thread_id[i]), NULL, thread_inc, NULL);
}
else{
pthread_create(&(thread_id[i]), NULL, thread_des, NULL);
}
}
for(i=0; i<NUM_THREAD; i++)
{
pthread_join(thread_id[i], NULL);
}
printf("result : %lld \n", num);
pthread_mutex_destroy(&mutex);
return 0;
}
void *thread_inc(void *arg){
int i;
pthread_mutex_lock(&mutex);
for(i=0; i<50000000; i++)
{
num+=1;
}
pthread_mutex_unlock(&mutex);
return NULL;
}
void *thread_des(void *arg){
int i;
for(i=0; i<50000000; i++)
{
pthread_mutex_lock(&mutex);
num-=1;
pthread_mutex_unlock(&mutex);
}
return NULL;
}