For this project, you will modify your Project 1 Index code and Project 2 Search code to support multithreading using a custom-made conditional read/write lock to create a thread-safe inverted index and a custom-made work queue to manage worker threads.

The build process should be multithreaded such that a worker thread processes a single file. The search process should be multithreaded such that a worker thread processes a single multi-word query line. To do this, you should create new classes (or extend existing classes) to support multithreading.

DO NOT REMOVE YOUR SINGLE THREADING CODE, as you still need to support single threaded building and searching the index.

This project is broken into three parts: v3.0 focused on multithreading the data structure and search process, v3.1 focused on multithreading the build process. See each milestone writeup for details.

<aside> <img src="/icons/error_gray.svg" alt="/icons/error_gray.svg" width="40px" /> Do NOT use any of the classes in the java.util.concurrent package and do NOT use the Stream.parallel method for the multithreaded code.

</aside>

TABLE OF CONTENTS


Milestones

This project is broken into multiple milestones:

Project v3.0 Tests

Project v3.1 Tests

Project v3.2 Review

Project v3.3 Review

Project v3.4 Design

See each milestone for more details.

Homework

The Homework 3 homework bundle is related to this project: