Class queue {
public:
queue(int size): size(size), head(0), tail(0) {
}
bool is_full() {
// or return ((tail + 1)%MAX_SIZE == head ? true : false);
if(head == 0) {
return tail == size - 1;
} else {
return tail == head - 1;
}
}
bool empty() {
return head == tail;
}
int front() {
if (empty()) { //exception}
return arr[head];
}
int back() {
if (empty()) { //exception}
return arr[tail];
}
void push(int val) {
if (is_full()) { //exception }
if (tail == size - 1) {
tail = 0;
} else {
tail++;
}
arr[tail] = val;
}
void pop() {
if (empty()) { //exception }
if (head == size - 1) {
head = 0;
} else {
head++;
}
}
private:
int size, head, tail;
int arr[size];
};
===== Thread-Safe implementation using mutex and condition_variable. ===
https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/
public:
queue(int size): size(size), head(0), tail(0) {
}
bool is_full() {
// or return ((tail + 1)%MAX_SIZE == head ? true : false);
if(head == 0) {
return tail == size - 1;
} else {
return tail == head - 1;
}
}
bool empty() {
return head == tail;
}
int front() {
if (empty()) { //exception}
return arr[head];
}
int back() {
if (empty()) { //exception}
return arr[tail];
}
void push(int val) {
if (is_full()) { //exception }
if (tail == size - 1) {
tail = 0;
} else {
tail++;
}
arr[tail] = val;
}
void pop() {
if (empty()) { //exception }
if (head == size - 1) {
head = 0;
} else {
head++;
}
}
private:
int size, head, tail;
int arr[size];
};
===== Thread-Safe implementation using mutex and condition_variable. ===
https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/
No comments:
Post a Comment