+void empth_rwlock_destroy(empth_rwlock_t *rwlock);
+
+/*
+ * Lock @rwlock for writing.
+ * A read-write lock can be locked for writing only when it is
+ * unlocked. If this is not the case, put the current thread to sleep
+ * until it is.
+ */
+void empth_rwlock_wrlock(empth_rwlock_t *rwlock);
+
+/*
+ * Lock @rwlock for reading.
+ * A read-write lock can be locked for reading only when it is not
+ * locked for writing, and no other thread is attempting to lock it
+ * for writing. If this is not the case, put the current thread to
+ * sleep until it is.
+ */
+void empth_rwlock_rdlock(empth_rwlock_t *rwlock);
+
+/*
+ * Unlock read-write lock @rwlock.
+ * The current thread must hold @rwlock.
+ * Wake up threads that can now lock it.
+ */
+void empth_rwlock_unlock(empth_rwlock_t *rwlock);
+
+
+/*
+ * Stuff for implementations, not for clients.
+ */
+
+void empth_init_signals(void);