Мьютекс должен защищать одновременно используемую переменную от ... ну ... одновременного доступа.
Чтобы сделать это успешно, мьютекс должен быть заблокирован непосредственно перед тем, как будет доступна переменная. После этого его можно разблокировать.
Как правило, это не связано ни с какими вызовами функций (если это не делается с помощью одновременных обращений к указателям на функции, чего не происходит в показанном вами коде).
Ссылаясь на ваш пример, переменная одновременного доступа имеет вид int T[5]
.
Итак, код может выглядеть так:
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int T[5];
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* fct1(void* arg)
{
int i = 0;
while(i<5)
{
//debut de la section critique
pthread_mutex_lock(&mutex);
T[i] = 2 * (i+1);
printf("le thread 1 ecrit : %d\n",T[i]);
pthread_mutex_unlock(&mutex);
//fin de la section critique
i++;
}
pthread_exit(NULL);
}
void* fct2(void* arg){
int i = 0;
while(i<5)
{
//debut de la section critique
pthread_mutex_lock(&mutex);
printf("le thread 2 li : %d \n",T[i]);
pthread_mutex_unlock(&mutex);
//fin de la section critique
i++;
}
pthread_exit(NULL);
}
int main ()
{
pthread_t T1 , T2;
pthread_create(&T1, NULL, fct1, NULL);
pthread_create(&T2, NULL, fct2, NULL);
pthread_join(T1, NULL);
pthread_join(T2, NULL);
return 0;
}