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

    xiaoxiao2021-03-25  139

    以下案例是两个线程同时访问一个全局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; }

    转载请注明原文地址: https://ju.6miu.com/read-13178.html

    最新回复(0)