The SD API (S132-6.0.0) documentation provides little beyond what one could guess from the function and type names. sd_mutex_acquire says "Attempt to acquire a mutex". nrf_mutex_t says "Represents a mutex for use with the nrf_mutex functions" (which almost certainly should have been "... with the sd_mutex functions").
The SD Specification is more informative, saying it's to "avoid disabling global interrupts in the application because ... [that] will interfere with the SoftDevice". But this suggests the mutex doesn't prevent the SD from doing whatever it wants whenever it wants. If I only want to protect against conflicting access from my own code, I'm not clear why I need the SD to help me do this.
I can find no uses of the sd_mutex API in the examples in nRF5-SDK 15.
So what capability is the sd_mutex_* API intended to provide? When should we use it?
(This is in the context of this question for which I'm still searching a solution. If the read of content from BLE_GATTS_VLOC_USER data occurs during a priority 0 interrupt, which I haven't yet been able to disprove, I have to use PRIMASK to ensure the characteristic values are internally consistent. No?)