Как использовать 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 "

C extern: как использовать модификатор extern в языке C
Sign In to Microsoft Online Account
Enum в Си - основные концепции и примеры использования
Белый прямоугольник PNG - скачать бесплатно
JS Constructor - создание объектов с помощью JavaScript конструктора
Ошибка 1001: причины, способы исправления и советы
<h1>SQL Current Date - получение текущей даты и времени с помощью SQL
Arduino Random - создание случайных чисел и генерация случайных событий
Хэширование в Python с помощью модуля hashlib
Python удаление файла