diff --git a/interface.c b/interface.c index d441eda..2609671 100644 --- a/interface.c +++ b/interface.c @@ -1,6 +1,7 @@ // // Created by ary on 29.07.2026. // +#include #include #ifdef _WIN32 #include @@ -18,7 +19,8 @@ #include #include "helper.h" #include -#define WORKTHREADSIZE 32 +#include +#define WORKTHREADSIZE 16 void* renderPixel(RenderArgs *arg, int pixelId) { RenderArgs *args = (RenderArgs*)arg; @@ -57,11 +59,7 @@ void *workerLoop(void *arg) { RenderArgs *args = (RenderArgs*)arg; while (1) { - pthread_mutex_lock(&args->mutexKey); - int pixelId = args->nextPixelId; - args->nextPixelId++; - pthread_mutex_unlock(&args->mutexKey); - + int pixelId = atomic_fetch_add(&args->nextPixelId, 1); if (pixelId >= args->pixelCount) break; renderPixel(args, pixelId); @@ -73,9 +71,7 @@ void* monitorProgress(void *arg) { MonitorArgs *args = (MonitorArgs*)arg; while (1){ - pthread_mutex_lock(args->mutexKey); - int pixelId = *args->nextPixelId; - pthread_mutex_unlock(args->mutexKey); + int pixelId = *atomic_load(&args->nextPixelId); if (pixelId >= args->pixelCount) break; double progress = 100.0 * pixelId / args->pixelCount; printf("progress: %lf%%\n", progress); diff --git a/test.png b/test.png index ecfeca5..4c6e7b1 100644 Binary files a/test.png and b/test.png differ