Thanks to visit codestin.com
Credit goes to github.com

Skip to content

lusenoot/distlock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

distlock for c implemented by redis


Based on redis redlock

To create an lock manager

API: distmutex_t *dist_mutex_init(const redisContext **ctx, size_t count, size_t vallen);

distmutex_t *mutex = dist_mutex_init(redisctx, ctx_count, 16);

Acquire a lock

API:
    int dist_mutex_lock(distmutex_t *mutex, const char *key, int expiretime);
    int dist_mutex_trylock(distmutex_t *mutex, const char *key, int expiretime, int retries);

int iret = dist_mutex_lock(mutex, "my_key_name", 10000);
if (iret != MUTEX_OK) {
    printf("lock failed\n");
}

Or:
int iret = dist_mutex_trylock(mutex, "my_key_name", 10000, 3);
if (iret != MUTEX_OK) {
    printf("lock failed\n");
}

Release a lock

API: int dist_mutex_unlock(distmutex_t *mutex, const char *key);

int iret = dist_mutex_unlock(mutex, "my_key_name");
if (iret != MUTEX_OK) {
    printf("lock failed\n");
}

Get lock status

API: int dist_mutex_status(distmutex_t *mutex);

status: 0 for free, 1 for busy; but if mutex is NULL, return -2.
int status = dist_mutex_status(mutex);

Release lock manager

API: void dist_mutex_destroy(distmutex_t *mutex);

dist_mutex_destroy(mutex);

About

Distributed locks with Redis, implemented by c.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published