Index: uspace/lib/cpp/include/impl/mutex.hpp
===================================================================
--- uspace/lib/cpp/include/impl/mutex.hpp	(revision 4bea22a1c4d2a50915ea6e974e5cc0c24b65a99d)
+++ uspace/lib/cpp/include/impl/mutex.hpp	(revision 69e58387993ec4189bbb06a018a6b2b29e1d9633)
@@ -72,5 +72,10 @@
     {
         public:
-            constexpr recursive_mutex() noexcept;
+            constexpr recursive_mutex() noexcept
+                : mtx_{}, lock_level_{}, owner_{}
+            {
+                aux::threading::mutex::init(mtx_);
+            }
+
             ~recursive_mutex();
 
@@ -95,6 +100,40 @@
      */
 
-    // TODO: implement
-    class timed_mutex;
+    class timed_mutex
+    {
+        public:
+            timed_mutex() noexcept;
+            ~timed_mutex();
+
+            timed_mutex(const timed_mutex&) = delete;
+            timed_mutex& operator=(const timed_mutex&) = delete;
+
+            void lock();
+            bool try_lock();
+            void unlock();
+
+            template<class Rep, class Period>
+            bool try_lock_for(const chrono::duration<Rep, Period>& rel_time)
+            {
+                auto time = aux::threading::time::convert(rel_time);
+
+                return aux::threading::mutex::try_lock_for(time);
+            }
+
+            template<class Clock, class Duration>
+            bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time)
+            {
+                auto dur = (abs_time - Clock::now());
+                auto time = aux::threading::time::convert(dur);
+
+                return aux::threading::mutex::try_lock_for(time);
+            }
+
+            using native_handle_type = aux::mutex_t*;
+            native_handle_type native_handle();
+
+        private:
+            aux::mutex_t mtx_;
+    };
 
     /**
