diff --git a/buffer.py b/buffer.py
new file mode 100644
index 0000000000000000000000000000000000000000..55277a56a1c12e555d64606252eed1c730344e22
--- /dev/null
+++ b/buffer.py
@@ -0,0 +1,32 @@
+import threading
+
+
+class Buffer:
+    def __init__(self, size):
+        self.size = size
+        self.buffer = []
+        self.mutex = threading.Lock()
+        self.condition = threading.Condition(self.mutex)
+
+    def push(self, item):
+        if len(self.buffer) == self.size:
+            raise ValueError("Buffer is full")
+
+        with self.condition:
+            self.buffer.append(item)
+            self.condition.notify()
+
+    def pop(self):
+        if len(self.buffer) == 0:
+            raise ValueError("Buffer is empty")
+
+        with self.condition:
+            item = self.buffer.pop(0)
+            self.condition.notify()
+            return item
+
+    def full(self):
+        return len(self.buffer) == self.size
+
+    def empty(self):
+        return len(self.buffer) == 0