|
...
|
...
|
@@ -104,6 +104,8 @@ void choices_init(choices_t *c) {
|
|
104
|
104
|
c->capacity = c->size = 0;
|
|
105
|
105
|
choices_resize(c, INITIAL_CHOICE_CAPACITY);
|
|
106
|
106
|
|
|
|
107
|
+ c->worker_count = 8;
|
|
|
108
|
+
|
|
107
|
109
|
choices_reset_search(c);
|
|
108
|
110
|
}
|
|
109
|
111
|
|
|
...
|
...
|
@@ -149,8 +151,8 @@ static void *choices_search_worker(void *data) {
|
|
149
|
151
|
struct worker *w = (struct worker *)data;
|
|
150
|
152
|
const choices_t *c = w->choices;
|
|
151
|
153
|
|
|
152
|
|
- size_t start = (w->worker_num) * c->size / w->worker_count;
|
|
153
|
|
- size_t end = (w->worker_num + 1) * c->size / w->worker_count;
|
|
|
154
|
+ size_t start = (w->worker_num) * c->size / c->worker_count;
|
|
|
155
|
+ size_t end = (w->worker_num + 1) * c->size / c->worker_count;
|
|
154
|
156
|
|
|
155
|
157
|
for(size_t i = start; i < end; i++) {
|
|
156
|
158
|
if (has_match(w->search, c->strings[i])) {
|
|
...
|
...
|
@@ -173,12 +175,10 @@ void choices_search(choices_t *c, const char *search) {
|
|
173
|
175
|
abort();
|
|
174
|
176
|
}
|
|
175
|
177
|
|
|
176
|
|
- int worker_count = 8;
|
|
177
|
|
- struct worker *workers = calloc(worker_count, sizeof(struct worker));
|
|
178
|
|
- for (int i = 0; i < worker_count; i++) {
|
|
|
178
|
+ struct worker *workers = calloc(c->worker_count, sizeof(struct worker));
|
|
|
179
|
+ for (unsigned int i = 0; i < c->worker_count; i++) {
|
|
179
|
180
|
workers[i].choices = c;
|
|
180
|
181
|
workers[i].search = search;
|
|
181
|
|
- workers[i].worker_count = worker_count;
|
|
182
|
182
|
workers[i].worker_num = i;
|
|
183
|
183
|
workers[i].results = malloc(c->size * sizeof(struct scored_result)); /* FIXME: This is overkill */
|
|
184
|
184
|
if (pthread_create(&workers[i].thread_id, NULL, &choices_search_worker, &workers[i])) {
|
|
...
|
...
|
@@ -187,7 +187,7 @@ void choices_search(choices_t *c, const char *search) {
|
|
187
|
187
|
}
|
|
188
|
188
|
}
|
|
189
|
189
|
|
|
190
|
|
- for (int i = 0; i < worker_count; i++) {
|
|
|
190
|
+ for (unsigned int i = 0; i < c->worker_count; i++) {
|
|
191
|
191
|
struct worker *w = &workers[i];
|
|
192
|
192
|
|
|
193
|
193
|
if (pthread_join(w->thread_id, NULL)) {
|