Вообщем генерируем изображение:
Код: Выделить всё
for(uintmax_t x=0; x<resox; x++)
{
static ROW_TYPE row[resox*3];
for(uintmax_t y=0; y<resoy; y++)
{
...
}
png_write_row(png_ptr, (png_bytep)row);Хотел как сделать, чтобы вычисления происходили непрерывно, а строки записывались по порядку, т.е. что-то вроде этого:
Код: Выделить всё
while(1)
{
if(x==0 || state[x-1])
{
png_write_row(png_ptr, (png_bytep)row);
state[x] = 1;
break;
}
}Но оно не работает. Можно заставить работать, если добавить что-то вроде:
Код: Выделить всё
while(1)
{
if(x==0 || state[x-1])
{
png_write_row(png_ptr, (png_bytep)row);
state[x] = 1;
break;
}
usleep(1);
}Но это не решение проблемы, ибо оно работает еще дольше, да и то через раз.
Отсюда следует вполне очевидный вывод, что while(1) сжирает все процессорное время и отсюда следует вопрос: "Как это сделать правильно"?
P.S. Переходить с OpenMP на что-нибудь другое не очень хочется.
Вообщем до чего дошел, с помощью pthreads создал "постоянный" поток, в котором отслеживаю готовность кусков и записываю их последовательно (ну и память динамическая, malloc/free).