Linux--多线程访问全局变量互斥的例子

来源:互联网 发布:网眼监控软件破解版 编辑:程序博客网 时间:2024/05/16 03:32

以下案例是两个线程同时访问一个全局worker变量,并分别对里面的成员counter进行增长


#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>#include <string.h>#define MAX_NUM 5000typedef 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;}


0 0