Как использовать Mutex C для защиты ресурсов в многопоточных программах

Мьютекс — это механизм синхронизации, используемый для управления доступом к ресурсам многопоточной программы. Он обеспечивает монопольный доступ к критической секции кода для предотвращения одновременного доступа нескольких потоков. Если поток владеет мьютексом, то другие потоки не могут получить доступ к защищаемому ресурсу до тех пор, пока мьютекс не будет освобожден первым потоком.

Пример создания и использования мьютекса на языке C:

c
#include 
#include 
#include 
pthread_mutex_t mutex;
void *thread_func(void *arg) {
    pthread_mutex_lock(&mutex);
    printf("Thread %d: locked mutex\n", (int) arg);
    // Критическая секция
    printf("Thread %d: unlocked mutex\n", (int) arg);
    pthread_mutex_unlock(&mutex);
    return NULL;
}
int main() {
    pthread_t threads[5];
    pthread_mutex_init(&mutex, NULL);
    for (int i = 0; i < 5; i++) {
        pthread_create(&threads[i], NULL, thread_func, (void *) i);
    }
    for (int i = 0; i < 5; i++) {
        pthread_join(threads[i], NULL);
    }
    pthread_mutex_destroy(&mutex);
    return 0;
}

В этом примере создаются пять потоков, которые конкурентно работают с мьютексом. Функция `thread_func` блокирует мьютекс, заходит в критическую секцию, выполняет работу и освобождает мьютекс.

Функция `pthread_mutex_lock` блокирует мьютекс и ожидает, пока другой поток не освободит его. Если поток уже владеет мьютексом, то он продолжает свою работу без блокировки.

Функция `pthread_mutex_unlock` освобождает мьютекс и позволяет другим потокам получить доступ к защищаемому ресурсу.

Функция `pthread_mutex_init` инициализирует мьютекс перед использованием, а функция `pthread_mutex_destroy` уничтожает его после окончания работы программы.

В результате выполнения программы вывод на консоль будет примерно таким:


Thread 0: locked mutex
Thread 2: locked mutex
Thread 3: locked mutex
Thread 1: locked mutex
Thread 4: locked mutex
Thread 0: unlocked mutex
Thread 2: unlocked mutex
Thread 1: unlocked mutex
Thread 4: unlocked mutex
Thread 3: unlocked mutex

Как видно из вывода, мьютекс блокируется и освобождается в правильном порядке, не допуская одновременного доступа нескольких потоков к критической секции кода.

Похожие вопросы на: "mutex c "

Everything You Need to Know About Kernel
Test Train Split: A Crucial Step in Machine Learning
Convert Excel to JSON in Seconds
DateTime Now: The Ultimate Tool for Real-Time Dating
Int Размер: определение, использование и лучшие практики
Bootstrap 5 Modal - удобный инструмент для создания модальных окон
Storage Emulated: удобное и безопасное хранение данных на устройствах Android
<h1>Docker Build Dockerfile: создание и сборка контейнерных образов с помощью Docker
Make Test - улучшите свои навыки тестирования
Mastering the Input Value Feature: Boosting User Experience and Functionality