diff --git a/src/threadloop.cpp b/src/threadloop.cpp
index 4cc4fd40427f572badd9a78bf7465d6236794a7d..1f95bb67c91d3da7c0645e095f244cb0694d6b8f 100644
--- a/src/threadloop.cpp
+++ b/src/threadloop.cpp
@@ -142,7 +142,6 @@ void
 InterruptedThreadLoop::stop()
 {
     ThreadLoop::stop();
-    std::lock_guard<std::mutex> lk(mutex_);
     cv_.notify_one();
 }
 } // namespace ring
diff --git a/src/threadloop.h b/src/threadloop.h
index a5eb3d65003ea219eb3a108eadb7740946ba977f..33d6bf8ea6c0c36f4be362f07f9668d32a5e34ef 100644
--- a/src/threadloop.h
+++ b/src/threadloop.h
@@ -86,6 +86,11 @@ public:
 
     void stop() override;
 
+    void interrupt() noexcept
+    {
+        cv_.notify_one();
+    }
+
     template <typename Rep, typename Period>
     void
     wait_for(const std::chrono::duration<Rep, Period>& rel_time)