diff --git a/pyfastani/_atomic_vector.hpp b/pyfastani/_atomic_vector.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..a3ebcc01633a4baea733a716ef4ce950383fa052
--- /dev/null
+++ b/pyfastani/_atomic_vector.hpp
@@ -0,0 +1,21 @@
+#ifndef _SAFEVEC_HPP
+#define _SAFEVEC_HPP
+
+#include <mutex>
+#include <vector>
+
+
+template <class T>
+class atomic_vector: public std::vector<T> {
+protected:
+    std::mutex mutex;
+public:
+    atomic_vector(): std::vector<T>(), mutex() {}
+    void push_back(const T& val) {
+        mutex.lock();
+        std::vector<T>::push_back(val);
+        mutex.unlock();
+    }
+};
+
+#endif
diff --git a/pyfastani/_atomic_vector.pxd b/pyfastani/_atomic_vector.pxd
new file mode 100644
index 0000000000000000000000000000000000000000..1c0798699204238303b8b455968782287b5f973b
--- /dev/null
+++ b/pyfastani/_atomic_vector.pxd
@@ -0,0 +1,5 @@
+from libcpp.vector cimport vector
+
+cdef extern from "_atomic_vector.hpp" nogil:
+    cdef cppclass atomic_vector[T](vector[T]):
+        pass