以下案例是两个线程同时访问一个全局worker变量,并分别对里面的成员counter进行增长
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#define MAX_NUM 5000
typedef struct
{
int counter;
pthread_mutex_t counter_mutex;
}COUNTER;
COUNTER worker;
void *run(void *arg)
{
int i = 0;
int val = 0;
char line[1024] = {0};
for (; i < MAX_NUM; ++i)
{
pthread_mutex_lock(&worker.counter_mutex);
val = worker.counter;
sprintf(line, "thread = %d, counter = %d\n", (int)pthread_self(), val+1);
write(STDOUT_FILENO, line, strlen(line));
worker.counter = val + 1;
memset(line, 0, strlen(line));
pthread_mutex_unlock(&worker.counter_mutex);
}
}
int main(int argc, char *argv[])
{
pthread_t tid1, tid2;
worker.counter = 0;
pthread_mutex_init(&worker.counter_mutex, NULL);
pthread_create(&tid1, NULL, run, NULL);
pthread_create(&tid2, NULL, run, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&worker.counter_mutex);
return 0;
}