Я написал следующую программу. Я ожидаю, что эта функция напечатает 1, 2 последовательно, но программа ждет некоторое время (например, 10 секунд), а затем распечатает весь результат.параллельное выполнение потоков ненадежное поведение
вот код:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
void *thread_function(void *arg);
char message[] = "Hello World";
int run_now = 1;
int main()
{
int res;
pthread_t a_thread;
void *thread_result;
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0)
{
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
int print_count1 = 0;
while(print_count1++ < 20)
{
if (run_now == 1)
{
printf("1");
run_now = 2;
}
else
{
sleep(1);
}
}
printf("\nWaiting for thread to finish...\n");
res = pthread_join(a_thread, &thread_result);
if (res != 0)
{
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined. \n");
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg)
{
int print_count2 = 0;
while(print_count2++ < 20)
{
if (run_now == 2)
{
printf("2");
run_now = 1;
}
else
{
sleep(1);
}
}
}
я рассчитывать на 1, 2 печатается каждые 1 секунды, но программа ожидает несколько раз, а затем печатает все строки целиком. может кто-нибудь сказать мне, в чем причина?
попробовать его с 'Е ("2 \ п");'. – duedl0r
'run_now' должен быть защищен или сделан атомарным, ваш код, поскольку он имеет расы данных = неопределенное поведение. – Mat
спасибо, что работает! – muradin