init
This commit is contained in:
302
unitree_SDK/include/dds/ddsrt/sync.h
Normal file
302
unitree_SDK/include/dds/ddsrt/sync.h
Normal file
@@ -0,0 +1,302 @@
|
||||
/*
|
||||
* Copyright(c) 2006 to 2019 ZettaScale Technology and others
|
||||
*
|
||||
* This program and the accompanying materials are made available under the
|
||||
* terms of the Eclipse Public License v. 2.0 which is available at
|
||||
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
|
||||
* v. 1.0 which is available at
|
||||
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||||
*
|
||||
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
|
||||
*/
|
||||
#ifndef DDSRT_SYNC_H
|
||||
#define DDSRT_SYNC_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "dds/ddsrt/time.h"
|
||||
#include "dds/ddsrt/retcode.h"
|
||||
#include "dds/ddsrt/attributes.h"
|
||||
|
||||
#if DDSRT_WITH_FREERTOS
|
||||
#include "dds/ddsrt/sync/freertos.h"
|
||||
#elif _WIN32
|
||||
#include "dds/ddsrt/sync/windows.h"
|
||||
#elif __SunOS_5_6
|
||||
#include "dds/ddsrt/sync/solaris2.6.h"
|
||||
#else
|
||||
#include "dds/ddsrt/sync/posix.h"
|
||||
#endif
|
||||
|
||||
#if defined (__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Initialize a mutex.
|
||||
*
|
||||
* @param[in] mutex Mutex to itialize.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_mutex_init(
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Destroy a mutex.
|
||||
*
|
||||
* @param[in] mutex Mutex to destroy.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_mutex_destroy(
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Acquire a mutex.
|
||||
*
|
||||
* @param[in] mutex Mutex to acquire.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_mutex_lock(
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Acquire a mutex if it is not already acquired.
|
||||
*
|
||||
* @param[in] mutex Mutex to acquire.
|
||||
*
|
||||
* @returns true if the mutex was acquired, false otherwise.
|
||||
*/
|
||||
DDS_EXPORT bool
|
||||
ddsrt_mutex_trylock(
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all
|
||||
ddsrt_attribute_warn_unused_result;
|
||||
|
||||
/**
|
||||
* @brief Release an acquired mutex.
|
||||
*
|
||||
* @param[in] mutex Mutex to release.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_mutex_unlock (
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Initialize a condition variable.
|
||||
*
|
||||
* @param[in] cond Condition variable to initialize.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_cond_init(
|
||||
ddsrt_cond_t *cond)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Destroy a condition variable.
|
||||
*
|
||||
* @param[in] cond Condition variable to destroy.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_cond_destroy(
|
||||
ddsrt_cond_t *cond)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Wait for a condition variable to be signalled.
|
||||
*
|
||||
* @param[in] cond Condition variable to block on.
|
||||
* @param[in] mutex Mutex to associate with condition variable.
|
||||
*
|
||||
* @pre The calling thread must hold the mutex specified by @mutex.
|
||||
*
|
||||
* @post The calling thread will hold the mutex specified by @mutex.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_cond_wait(
|
||||
ddsrt_cond_t *cond,
|
||||
ddsrt_mutex_t *mutex)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Wait until @abstime for a condition variable to be signalled.
|
||||
*
|
||||
* @param[in] cond Condition variable to block on.
|
||||
* @param[in] mutex Mutex to associate with condition variable.
|
||||
* @param[in] abstime Time in nanoseconds since UNIX Epoch.
|
||||
*
|
||||
* @pre The calling thread must hold the mutex specified by @mutex.
|
||||
*
|
||||
* @post The calling thread will hold the mutex specified by @mutex.
|
||||
*
|
||||
* @returns false if the condition variable was not signalled before the
|
||||
* absolute time specified by @abstime passed, otherwise true.
|
||||
*/
|
||||
DDS_EXPORT bool
|
||||
ddsrt_cond_waituntil(
|
||||
ddsrt_cond_t *cond,
|
||||
ddsrt_mutex_t *mutex,
|
||||
dds_time_t abstime)
|
||||
ddsrt_nonnull((1,2));
|
||||
|
||||
/**
|
||||
* @brief Wait for @reltime for a condition variable to be signalled.
|
||||
*
|
||||
* @param[in] cond Condition variable to block on.
|
||||
* @param[in] mutex Mutex to associate with condition variable.
|
||||
* @param[in] reltime Time in nanoseconds since UNIX Epoch.
|
||||
*
|
||||
* @pre The calling thread must hold the mutex specified by @mutex.
|
||||
*
|
||||
* @post The calling thread will hold the mutex specified by @mutex.
|
||||
*
|
||||
* @returns false if the condition variable was not signalled before the
|
||||
* relative time specified by @reltime passed, otherwise true.
|
||||
*/
|
||||
DDS_EXPORT bool
|
||||
ddsrt_cond_waitfor(
|
||||
ddsrt_cond_t *cond,
|
||||
ddsrt_mutex_t *mutex,
|
||||
dds_duration_t reltime)
|
||||
ddsrt_nonnull((1,2));
|
||||
|
||||
/**
|
||||
* @brief Signal a condition variable and unblock at least one thread.
|
||||
*
|
||||
* @param[in] cond Condition variable to signal.
|
||||
*
|
||||
* @pre The mutex associated with the condition in general should be acquired
|
||||
* by the calling thread before setting the condition state and
|
||||
* signalling.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_cond_signal(
|
||||
ddsrt_cond_t *cond)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Signal a condition variable and unblock all threads.
|
||||
*
|
||||
* @param[in] cond Condition variable to signal.
|
||||
*
|
||||
* @pre The mutex associated with the condition in general should be acquired
|
||||
* by the calling thread before setting the condition state and
|
||||
* signalling
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_cond_broadcast(
|
||||
ddsrt_cond_t *cond)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Initialize a read-write lock.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to initialize.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_rwlock_init(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Destroy a read-write lock.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to destroy.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_rwlock_destroy(
|
||||
ddsrt_rwlock_t *rwlock);
|
||||
|
||||
/**
|
||||
* @brief Acquire a read-write lock for reading.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to acquire.
|
||||
*
|
||||
* @post Data related to the critical section must not be changed by the
|
||||
* calling thread.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_rwlock_read(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Acquire a read-write lock for writing.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to acquire.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_rwlock_write(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/**
|
||||
* @brief Try to acquire a read-write lock for reading.
|
||||
*
|
||||
* Try to acquire a read-write lock while for reading, immediately return if
|
||||
* the lock is already exclusively acquired by another thread.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to aqcuire.
|
||||
*
|
||||
* @post Data related to the critical section must not changed by the
|
||||
* calling thread.
|
||||
*
|
||||
* @returns true if the lock was acquired, otherwise false.
|
||||
*/
|
||||
DDS_EXPORT bool
|
||||
ddsrt_rwlock_tryread(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all
|
||||
ddsrt_attribute_warn_unused_result;
|
||||
|
||||
/**
|
||||
* @brief Try to acquire a read-write lock for writing.
|
||||
*
|
||||
* Try to acquire a read-write lock for writing, immediately return if the
|
||||
* lock is already acquired, either for reading or writing, by another thread.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to acquire.
|
||||
*
|
||||
* @returns true if the lock was acquired, otherwise false.
|
||||
*/
|
||||
DDS_EXPORT bool
|
||||
ddsrt_rwlock_trywrite(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all
|
||||
ddsrt_attribute_warn_unused_result;
|
||||
|
||||
/**
|
||||
* @brief Release a previously acquired read-write lock.
|
||||
*
|
||||
* @param[in] rwlock Read-write lock to release.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_rwlock_unlock(
|
||||
ddsrt_rwlock_t *rwlock)
|
||||
ddsrt_nonnull_all;
|
||||
|
||||
/* Initialization callback used by ddsrt_once */
|
||||
typedef void (*ddsrt_once_fn)(void);
|
||||
|
||||
/**
|
||||
* @brief Invoke init_fn exactly once for a given control.
|
||||
*
|
||||
* The first thread to call this function with a given control will call the
|
||||
* function specified by @init_fn with no arguments. All following calls with
|
||||
* the same control will not call the specified function.
|
||||
*
|
||||
* @pre The control parameter is properly initialized with DDSRT_ONCE_INIT.
|
||||
*/
|
||||
DDS_EXPORT void
|
||||
ddsrt_once(
|
||||
ddsrt_once_t *control,
|
||||
ddsrt_once_fn init_fn);
|
||||
|
||||
#if defined (__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* DDSRT_SYNC_H */
|
Reference in New Issue
Block a user