Если я заблокирую один и тот же мьютекс в двух разных местах в моей функции, и произойдет переключение контекста, когда один поток находится в одном из них, а второй поток перейдет к другому, будет ли он заблокирован?
Я постараюсь привести простой пример того, что я имею в виду, может быть, это будет понятнее.Скажем, у меня есть следующий код в файле test.c
int globalVar = 0;
void testMutex(pthread_mutex_t myMutex) {
pthread_mutex_lock(&myMutex);
globalVar++;
pthread_mutex_unlock(&myMutex);
printf("%s \n", "Doing some other stuff here");
pthread_mutex_lock(&myMutex);
globalVar--;
pthread_mutex_unlock(&myMutex);
}
и в другом файле main.c, у меня есть функция main, которая создает два потока, thread1
и thread2
, оба работаютtestMutex
функция.thread1
выполняется первым, а во второй части функции (часть -, после printf
), перед тем как мьютекс разблокирован, thread2
запускается с начала функции.thread2
сможет выполнить globalVar++
или останется заблокированным, ожидая разблокировки мьютекса?
Заранее спасибо!