|
| 1 | +# ConcurrentGraphDS |
| 2 | +This repository contains the implementation of a lock-based Concurrent Graph Data Structure. |
| 3 | +The algorithm is described in technical report '**Maintaining Acyclicity of Concurrent Graph Objects**' which can be accessed here: https://arxiv.org/abs/1611.03947. |
| 4 | + |
| 5 | +Source files can be found in *src* directory. |
| 6 | + |
| 7 | +The subdirectory *src/data_structure* provides the source code for Graph data structure variants, as decribed below: |
| 8 | +1. Sequential Graph data structure |
| 9 | +2. Concurrent Coarse Lock Graph Data Structure |
| 10 | +3. Concurrent Fine Lock Graph Data Structure without deletion of incoming edges of deleted vertices |
| 11 | +4. Concurrent Fine Lock Graph Data Structure with deletion of incoming edges of deleted vertices |
| 12 | + |
| 13 | +The subdirectory *src/acyclicity* provides the source code for Graph data structure variants which maintain acyclicity, as decribed below: |
| 14 | +1. Sequential Graph data structure |
| 15 | +2. Concurrent Coarse Lock Graph Data Structure |
| 16 | +3. Concurrent Fine Lock Graph Data Structure without deletion of incoming edges of deleted vertices (Cycle detection using collect) |
| 17 | +4. Concurrent Fine Lock Graph Data Structure with deletion of incoming edges of deleted vertices (Cycle detection using Reachability) |
| 18 | +5. Concurrent Fine Lock Graph Data Structure without deletion of incoming edges of deleted vertices (Cycle detection using collect) |
| 19 | +6. Concurrent Fine Lock Graph Data Structure with deletion of incoming edges of deleted vertices (Cycle detection using Reachability) |
| 20 | + |
| 21 | +To compile any source file, run the command: |
| 22 | +`g++ -std=c++11 filename.cpp -lpthread -o filename.o` |
| 23 | + |
| 24 | +To run this binary file, use the following format: |
| 25 | +`./filename numOfThreads numOfInitialVertices numOfOperationsPerThread` |
| 26 | + |
| 27 | +Example: |
| 28 | +1. For sequential program run: `./sequential 1 1000 150000` |
| 29 | +2. Whereas for a Concurrent program run: `./conc 150 1000 1000` |
| 30 | +(A concurrent program of 150 threads with 1000 operations per thread means total 150000 operations.) |
| 31 | + |
| 32 | +You can vary the workload distribution of these operations inside each of these programs. |
| 33 | + |
| 34 | +If you have any questions, please contact: cs15mtech01004@iith.ac.in, cs15resch11012@iith.ac.in |
0 commit comments