I am trying to launch multiple threads which take in arguments startX , startY and endX ,endY
for each subsequent thread the startX and the startY should be equal to the endX and endY of the thread launched before it
thrd_t* threads = malloc(sizeof(thrd_t)*height);
layerGenerationArgs* args = malloc(sizeof(layerGenerationArgs)*height);
int64_t startX;
int64_t startY;
int64_t endX = rand()%width;
int64_t endY = rand()%length;
for(uint64_t i = 0 ; i < height; i++){
startX = endX;
startY = endY;
do{
endX = rand()%width;
endY = rand()%length;
}while(endX == startX && endY == startY);
args[i].gridLayer = grid[i];
args[i].width = width;
args[i].length = length;
args[i].startX = startX;
args[i].startY = startY;
args[i].endX = endX;
args[i].endY = endY;
args[i].seed = rand();
thrd_create(&threads[i] , generateLayerThread, (void*) & args[i]);
}
this code only works for 2-3 threads before breaking
but when I run the code I get the output from thread function
int generateLayerThread(void* args){
layerGenerationArgs* arg = (layerGenerationArgs*) args;
uint16_t** gridLayer = arg->gridLayer;
uint64_t width = arg->width;
uint64_t length = arg->length;
int64_t startX = arg->startX;
int64_t startY = arg->startY;
int64_t endX = arg->endX;
int64_t endY = arg->endY;
uint64_t seed = arg->seed;
printf("thread: %p gridLayer address: %p, width: %lu, length: %lu, startX: %ld, startY: %ld, endX: %ld, endY: %ld, seed: %lun", (void*) thrd_current(),(void*)gridLayer, width, length, startX, startY, endX, endY, seed);
return 0;
}
thread: 0x7fe4ec8006c0 gridLayer address: 0x6001826c22d0, width: 20, length: 20, startX: 3, startY: 6, endX: 17, endY: 15, seed: 1957747793
thread: 0x7fe4eaa006c0 gridLayer address: 0x6001826c4e20, width: 20, length: 20, startX: 9, startY: 1, endX: 7, endY: 10, seed: 1102520059
thread: 0x7fe4ebe006c0 gridLayer address: 0x6001826c3140, width: 20, length: 20, startX: 17, startY: 15, endX: 15, endY: 6, seed: 1649760492
thread: 0x7fe4eb4006c0 gridLayer address: 0x6001826c3fb0, width: 20, length: 20, startX: 15, startY: 6, endX: 9, endY: 1, seed: 1025202362