SP_mutex_lock() #include <sicstus/sicstus.h>
static SP_mutex volatile mutex = SP_MUTEX_INITIALIZER;
int
SP_mutex_lock(SP_mutex *pmx);
Locks the mutex.
Zero on error, non-zero on success.
static SP_mutex volatile my_mutex = SP_MUTEX_INITIALIZER;
// only access this counter with my_mutex locked
int volatile protected_counter = 0;
// returns the new value of protected_counter
int increment_the_counter(void)
{
int new_value;
if(SP_mutex_lock(&my_mutex) == 0) goto error_handling;
// No other thread can update protected_counter here
new_value = protected_counter+1;
protected_counter = new_value;
if (SP_mutex_unlock(&my_mutex) == 0) goto error_handling;
return new_value;
error_handling:
...
}