#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#define MAX 100000000
static pthread_mutex_t iLock = PTHREAD_MUTEX_INITIALIZER;
long count = 0;
void myThreadA(void)
{
long i, j;
pthread_mutex_lock(&iLock);
for (i=0; i<MAX; ++i)
{
j = count;
++j;
count = j;
}
printf("A The count is %ld\n", count);
pthread_mutex_unlock(&iLock);
}
void myThreadB(void)
{
long i, j ;
pthread_mutex_lock(&iLock);
for (i=0; i<MAX; ++i)
{
j = count;
++j;
count = j;
}
printf("B The count is %ld\n", count);
pthread_mutex_unlock(&iLock);
}
int main(int argc, char *argv[])
{
pthread_t tidA, tidB;
int i,ret;
ret = pthread_create(&tidA, NULL, (void *)myThreadA, NULL);
if (0 != ret)
{
puts("Create A pthread error");
exit(1);
}
ret = pthread_create(&tidB, NULL, (void *)myThreadB, NULL);
if (0 != ret)
{
puts("Create B pthread error");
exit(1);
}
puts("This is the main process.\n");
pthread_join(tidA, NULL);
pthread_join(tidB, NULL);
printf("The final count is %ld\n", count);
return 0;
}
[size=large]gcc -lpthread pmlock.c[/size]