diff --git a/sched/semaphore/spinlock.c b/sched/semaphore/spinlock.c
index fc46f05aae4002173612fc7993f59f155374e246..674ebb6b522ace304b42c3f38efe011760343f19 100644
--- a/sched/semaphore/spinlock.c
+++ b/sched/semaphore/spinlock.c
@@ -165,8 +165,9 @@ void spin_unlock(FAR volatile spinlock_t *lock)
   sched_note_spinunlock(this_task(), lock);
 #endif
 
-  *lock = SP_UNLOCKED;
   SP_DMB();
+  *lock = SP_UNLOCKED;
+  SP_DSB();
 }
 #endif