- for (i = 0; i < NR_THREADS; i++) {
- pthread_join(p[i].thread, NULL);
- }
+ /* this should be auto-tuned somehow */
+ chunk_size = window * 1000;
+
+ do {
+ unsigned sublist_size = chunk_size;
+ if (sublist_size > list_size)
+ sublist_size = list_size;
+
+ pthread_mutex_lock(&data_provider);
+ data_requester->list = list;
+ data_requester->list_size = sublist_size;
+ pthread_mutex_unlock(&data_ready);
+
+ list += sublist_size;
+ list_size -= sublist_size;
+ if (!sublist_size) {
+ pthread_join(data_requester->thread, NULL);
+ i--;
+ }
+ pthread_mutex_unlock(&data_request);
+ } while (i);