Disabled external gits
This commit is contained in:
47
cs453-ca/CS453-2021-project/sync-examples/lock.h
Normal file
47
cs453-ca/CS453-2021-project/sync-examples/lock.h
Normal file
@@ -0,0 +1,47 @@
|
||||
#pragma once
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* @brief A lock that can only be taken exclusively. Contrarily to shared locks,
|
||||
* exclusive locks have wait/wake_up capabilities.
|
||||
*/
|
||||
struct lock_t {
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cv;
|
||||
};
|
||||
|
||||
/** Initialize the given lock.
|
||||
* @param lock Lock to initialize
|
||||
* @return Whether the operation is a success
|
||||
**/
|
||||
bool lock_init(struct lock_t* lock);
|
||||
|
||||
/** Clean up the given lock.
|
||||
* @param lock Lock to clean up
|
||||
**/
|
||||
void lock_cleanup(struct lock_t* lock);
|
||||
|
||||
/** Wait and acquire the given lock.
|
||||
* @param lock Lock to acquire
|
||||
* @return Whether the operation is a success
|
||||
**/
|
||||
bool lock_acquire(struct lock_t* lock);
|
||||
|
||||
/** Release the given lock.
|
||||
* @param lock Lock to release
|
||||
**/
|
||||
void lock_release(struct lock_t* lock);
|
||||
|
||||
/** Wait until woken up by a signal on the given lock.
|
||||
* The lock is released until lock_wait completes at which point it is acquired
|
||||
* again. Exclusive lock access is enforced.
|
||||
* @param lock Lock to release (until woken up) and wait on.
|
||||
**/
|
||||
void lock_wait(struct lock_t* lock);
|
||||
|
||||
/** Wake up all threads waiting on the given lock.
|
||||
* @param lock Lock on which other threads are waiting.
|
||||
**/
|
||||
void lock_wake_up(struct lock_t* lock);
|
Reference in New Issue
Block a user