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

ый вопрос ..

Я прочитал, прежде чем сказать "MUTEX должен быть разблокирован только тем потоком, который его заблокировал."

Но я написал программу, гдеthread1 блокирует mutexVar и идет спать. затемthread2 Можно напрямую разблокировать mutexVar, выполнить некоторые операции и вернуться.

==> Я знаю, все говорят, почему я так делаю ?? Но мой вопрос - это правильное поведение MUTEX ??

==> Добавление примера кода

void *functionC()
{
   pthread_mutex_lock( &mutex1 );
   counter++;
   sleep(10);
   printf("Thread01: Counter value: %d\n",counter);
   pthread_mutex_unlock( &mutex1 );
}

void *functionD()
{
   pthread_mutex_unlock( &mutex1 );
   pthread_mutex_lock( &mutex1 );
   counter=10;
   printf("Counter value: %d\n",counter);
}

int main()
{
   int rc1, rc2;
   pthread_t thread1, thread2;

   if(pthread_mutex_init(&mutex1, NULL))
   printf("Error while using pthread_mutex_init\n");

   if( (rc1=pthread_create( &thread1, NULL, &functionC, NULL)) )
   {   
      printf("Thread creation failed: %d\n", rc1);
   }   

   if( (rc2=pthread_create( &thread2, NULL, &functionD, NULL)) )
   {   
      printf("Thread creation failed: %d\n", rc2);
   } 

Ответы на вопрос(3)

Ваш ответ на вопрос