Потоки POSIX C. Пример мьютекса. Не работают, как ожидалось

У меня большая проблема, я не могу понять, почему мьютексы в C не работают так, как я ожидал. Вот мой код:

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

pthread_t mythread;
pthread_mutex_t mymutex;

void *anotherFunc(void*)
{
    pthread_mutex_lock(&mymutex);

    for(int i = 0; i < 100; i++)
        printf("anotherFunc\n");

    pthread_mutex_unlock(&mymutex);

    pthread_exit(NULL);
}

void *func(void*)
{
    pthread_mutex_lock(&mymutex);

    for(int i = 0; i < 100; i++)
        printf("func\n");

    pthread_mutex_unlock(&mymutex);

    pthread_exit(NULL);
}

int main(int argc, char *argv[])
{
    pthread_mutex_init(&mymutex, NULL);

    pthread_create(&mythread, NULL, func, NULL);
    pthread_create(&mythread, NULL, anotherFunc, NULL);

    pthread_mutex_destroy(&mymutex);

    pthread_exit(NULL);
    return EXIT_SUCCESS;
}

Я ожидаю, что программа напечатает сначала 100 сообщений «func», а затем 100 сообщений «anotherFunc». Я ожидаю, что выполнение достигнет func и заблокирует мьютекс. Когда выполнение достигает AnotherFunc, я ожидаю, пока func не разблокирует мьютекс. Но я получаю мешающие сообщения типа

func функция функция другая функция другая функция другая функция функция otherFunc

Я не понимаю, как эта штука работает. Пожалуйста помоги!

8
задан Jacob Krieg 15 April 2012 в 11:02
поделиться