У меня большая проблема, я не могу понять, почему мьютексы в 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
Я не понимаю, как эта штука работает. Пожалуйста помоги!