В ф-ции main я создаю 2 потока: print_xs1 и print_xs2.
print_xs1 записывает в массив arr последовательные значения.
print_xs2 считывает этот массив и выводит их на консоль.
Потоки используют мьютекс для разделения времени захвата массива.
По идее, потоки должны выполняться последовательно, но вывод программы
наводит меня на мысль, что это не так. Результат: 4545454545 (много раз), потом 67, потом 78 (оч. много раз), хотя я ожидаю:
0123456789 (оч. много раз)... Что я неправильно делаю?
Код программы:
----------------------------------------------
my_threads.c
----------------------------------------------
#include <pthread.h>
#include <stdio.h>
#include <semaphore.h>
int arr[2];
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
void* print_xs1 (void* unused)
{
int i=0;
while (1)
{
pthread_mutex_lock(&mutex);
arr[0]=i;
arr[1]=i+1;
i+=2;
if (i>9) i=0;
pthread_mutex_unlock(&mutex);
}
return NULL;
}
void* print_xs2 (void* unused)
{
while (1)
{
pthread_mutex_lock(&mutex);
printf("%d",arr[0]);
printf("%d",arr[1]);
pthread_mutex_unlock(&mutex);
}
return NULL;
}
int main()
{
pthread_t thread_id1;
pthread_t thread_id2;
pthread_create(&thread_id1, NULL, &print_xs1, NULL);
pthread_create(&thread_id2, NULL, &print_xs2, NULL);
while (1)
{
}
return 0;
}