GraphChi  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Macros
synchronized_queue.hpp
1 #ifndef SYNCHRONIZED_QUEUE_HPP
2 #define SYNCHRONIZED_QUEUE_HPP
3 
4 #include <queue>
5 #include "pthread_tools.hpp"
6 
7 // From graphlab
8 
9 namespace graphchi {
10 
11 
12  template <typename T>
14 
15  public:
16  synchronized_queue() { };
17  ~synchronized_queue() { };
18 
19  void push(const T &item) {
20  _queuelock.lock();
21  _queue.push(item);
22  _queuelock.unlock();
23  }
24 
25  bool safepop(T * ret) {
26  _queuelock.lock();
27  if (_queue.size() == 0) {
28  _queuelock.unlock();
29 
30  return false;
31  }
32  *ret = _queue.front();
33  _queue.pop();
34  _queuelock.unlock();
35  return true;
36  }
37 
38  T pop() {
39  _queuelock.lock();
40  T t = _queue.front();
41  _queue.pop();
42  _queuelock.unlock();
43  return t;
44  }
45 
46  size_t size() const{
47  return _queue.size();
48  }
49  private:
50  std::queue<T> _queue;
51  spinlock _queuelock;
52  };
53 
54  }
55 #endif
56 
57