Функция работает с переменными, которые должны быть защищены мьютексом от параллельных потоков.
Вызывающий эту функцию блокирует мьютекс, выполняет другие действия и вызывает эту функцию.
Теперь ситуация возникла необходимость в том, чтобы эта функция вызывалась из другого фрагмента кода.
Конечно, этот код также может блокировать мьютекс, но я подумал, что, возможно, функция может увидеть, должна ли она блокировать мьютекс или нет.
Что Мне нужна функция, которая сообщает мне, заблокировал ли текущий поток мьютекс. Тогда функция может go включиться без блокировки. В противном случае он заблокируется.
int need_to_lock = !my_thread_has_locked_the_mutex(&mutex);
if (need_to_lock)
mutex_lock(&mutex);
access variables;
if (need_to_lock)
mutex_unlock(&mutex);
Существует ли my_thread_has_locked_the_mutex? Я ничего не смог найти.
Редактировать в комментарии
Я не знал о рекурсивных мьютексах. Кажется, они делают то, о чем я думал.
То, что я сейчас использую, - это нерекурсивный мьютекс, который блокируется, если заблокирован дважды из одного потока.