refactored FineList to have Node in seperate file

This commit is contained in:
2020-12-30 18:50:31 +01:00
parent 0e83584a76
commit 337ca9b169
2 changed files with 26 additions and 29 deletions

View File

@@ -1,46 +1,26 @@
#include<iostream>
#include<thread>
#include <algorithm>
#include <queue>
#include <mutex>
#include <assert.h>
#include <bits/stdc++.h> #include <bits/stdc++.h>
#include"Node.cpp"
// TODO: implement fine grained locking // TODO: implement fine grained locking
class Node { class FineSet {
public:
int data;
Node* next;
std::mutex mut;
public:
void lock();
void unlock();
};
void Node::lock() {
this->mut.lock();
}
void Node::unlock() {
this->mut.unlock();
}
class Set {
Node* first; Node* first;
public: public:
Set(); FineSet();
bool add(int element); bool add(int element);
bool rmv(int element); bool rmv(int element);
bool ctn(int element); bool ctn(int element);
}; };
Set::Set(){ FineSet::FineSet(){
first = new Node(); // dummy node; first = new Node(); // dummy node;
Node* last = new Node(); Node* last = new Node();
last->data = INT_MAX; // end node; last->data = INT_MAX; // end node;
first->next = last; first->next = last;
} }
bool Set::add(int element) { bool FineSet::add(int element) {
this->first->lock(); this->first->lock();
Node* p = this->first; Node* p = this->first;
Node* c = p->next; Node* c = p->next;
@@ -68,7 +48,7 @@ bool Set::add(int element) {
} }
} }
bool Set::rmv(int element) { bool FineSet::rmv(int element) {
this->first->lock(); this->first->lock();
Node* p = this->first; Node* p = this->first;
Node* c = p->next; Node* c = p->next;
@@ -92,7 +72,7 @@ bool Set::rmv(int element) {
return false; return false;
} }
} }
bool Set::ctn(int element) { bool FineSet::ctn(int element) {
this->first->lock(); this->first->lock();
Node* p = this->first; Node* p = this->first;
Node* c = p->next; Node* c = p->next;

17
Assignment_2/Node.cpp Normal file
View File

@@ -0,0 +1,17 @@
#include <mutex>
class Node {
public:
int data;
Node* next;
std::mutex mut;
public:
void lock();
void unlock();
};
void Node::lock() {
this->mut.lock();
}
void Node::unlock() {
this->mut.unlock();
}