From aad5b420908d02b1d20a867014a39355d662d619 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Tue, 2 Nov 2021 11:49:41 +0100 Subject: [PATCH] A4 --- A2/fauxgrep-mt | Bin 25704 -> 25800 bytes A2/fauxgrep-mt.c | 7 ------- A2/fhistogram | Bin 25728 -> 25728 bytes A2/fhistogram-mt.c | 10 ---------- A2/job_queue.c | 12 ++++++------ A2/src.zip | Bin 0 -> 9016 bytes 6 files changed, 6 insertions(+), 23 deletions(-) create mode 100644 A2/src.zip diff --git a/A2/fauxgrep-mt b/A2/fauxgrep-mt index b55b683b66f6e48ccc6763b917648628170e6658..48e644ab9ad2b7a2a59615a37d439a111763c21b 100755 GIT binary patch delta 5607 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 qUWX9z!^j`-Po}$17&R?Uj-Fwr~E%OBrRV6 delta 5221 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 diff --git a/A2/fauxgrep-mt.c b/A2/fauxgrep-mt.c index af8270a..7a7fa81 100644 --- a/A2/fauxgrep-mt.c +++ b/A2/fauxgrep-mt.c @@ -88,15 +88,12 @@ int main(int argc, char * const *argv) { paths = &argv[2]; } - //printf("Initializing job queue\n"); job_queue_init(&q, 64); pthread_t threads[num_threads]; for (int i = 0 ; i < num_threads ; i++) { - //printf("Initializing thread %i\n", i); pthread_create(&threads[i], NULL, fauxgrep_thread, strdup(needle)); } - //printf("finished initializing threads\n"); // FTS_LOGICAL = follow symbolic links // FTS_NOCHDIR = do not change the working directory of the process @@ -117,7 +114,6 @@ int main(int argc, char * const *argv) { case FTS_D: break; case FTS_F: - //printf("%s\n", p->fts_accpath); job_queue_push(&q, strdup(p->fts_path)); break; default: @@ -125,12 +121,9 @@ int main(int argc, char * const *argv) { } } - //printf("done pusing jobs\n"); - fts_close(ftsp); job_queue_destroy(&q); - //printf("done destroying jobqueue\n"); for (int i = 0 ; i < num_threads ; i++) { pthread_join(threads[i], NULL); diff --git a/A2/fhistogram b/A2/fhistogram index e3f4ae9355773e1a0ffe47b00e51dbca70cda6c9..5e1d08be0a2e6cc52a68b1275bb8cdcf20e1e1d0 100755 GIT binary patch delta 286 zcmZoT$=Gm`aYF~Q$gBHTrE5R0vTgXW_KI>%*UPhFW*VF4Fwf9sc4lCheAYm6bAX{4 z7o+axc5551jMU=csCF;G0HRX^8r;eFq{ApVAd5NgVCK4D0>&kVtxW5 zKwOsBKo-+a5SJSyD+wf6wLFf!ELTz2JQ)}mDuK8gh!+F#79eI~lxO1S1FB|VI0z!Ztg}D{qXQ#Q_8O4Id>2H3 zxGYbAET&H&E(=Ij2uQF>fCz=n^3Hb|twE-PY=N81sRoo~024+)79+@HCJzuR97Lpn zWQ%|VbIoRRS1}HqjQreG{k+WV{G7xredqj?RDGAklEj?+^h|vt10zExLnk9$=ltA) d;L2kC%?-Wjobs[job_queue->size] = data; job_queue->size = job_queue->size + 1; @@ -58,7 +58,7 @@ int job_queue_push(struct job_queue *job_queue, void *data) { pthread_mutex_trylock(&queue_destroy); } - //printf("push end\n"); + pthread_mutex_unlock(&queue_operation); return 0; } @@ -66,15 +66,15 @@ int job_queue_push(struct job_queue *job_queue, void *data) { int job_queue_pop(struct job_queue *job_queue, void **data) { pthread_mutex_lock(&queue_pop); pthread_mutex_lock(&queue_operation); - //printf("pop start\n"); + if (job_queue->jobs == NULL) { - //printf("no more job queue\n"); + pthread_mutex_unlock(&queue_pop); pthread_mutex_unlock(&queue_operation); return -1; } - //printf("job queue\n"); + job_queue->size = job_queue->size - 1; *data = job_queue->jobs[job_queue->size]; @@ -91,7 +91,7 @@ int job_queue_pop(struct job_queue *job_queue, void **data) { pthread_mutex_unlock(&queue_push); } - //printf("pop end\n"); + pthread_mutex_unlock(&queue_operation); return 0; } diff --git a/A2/src.zip b/A2/src.zip new file mode 100644 index 0000000000000000000000000000000000000000..d40ab08033cbfae5c387d815fdbaf4badefaf173 GIT binary patch literal 9016 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 dg8$RO|8g!nyt0KmK-!FNu%{_*$i{{ZRzYU%(0 literal 0 HcmV?d00001