semaphore_private.h [plain text]
#ifndef __OS_SEMAPHORE_PRIVATE__
#define __OS_SEMAPHORE_PRIVATE__
#include <Availability.h>
#include <stdint.h>
#include <os/base_private.h>
#include <os/tsd.h>
OS_ASSUME_NONNULL_BEGIN
__BEGIN_DECLS
#define OS_SEMAPHORE_SPI_VERSION 20130313
typedef uintptr_t os_semaphore_t;
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0)
OS_EXPORT OS_WARN_RESULT OS_NOTHROW
os_semaphore_t _os_semaphore_create(void);
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0)
OS_EXPORT OS_NOTHROW
void _os_semaphore_dispose(os_semaphore_t);
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0)
OS_EXPORT OS_NOTHROW
void _os_semaphore_wait(os_semaphore_t);
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_7_0)
OS_EXPORT OS_NOTHROW
void _os_semaphore_signal(os_semaphore_t);
OS_WARN_RESULT OS_NOTHROW
__header_always_inline os_semaphore_t
os_get_cached_semaphore(void)
{
os_semaphore_t sema;
sema = (os_semaphore_t)_os_tsd_get_direct(__TSD_SEMAPHORE_CACHE);
if (os_unlikely(!sema)) {
return _os_semaphore_create();
}
_os_tsd_set_direct(__TSD_SEMAPHORE_CACHE, 0);
return sema;
}
OS_NOTHROW
__header_always_inline void
os_put_cached_semaphore(os_semaphore_t sema)
{
os_semaphore_t old_sema;
old_sema = (os_semaphore_t)_os_tsd_get_direct(__TSD_SEMAPHORE_CACHE);
_os_tsd_set_direct(__TSD_SEMAPHORE_CACHE, (void*)sema);
if (os_unlikely(old_sema)) {
return _os_semaphore_dispose(old_sema);
}
}
OS_NOTHROW
__header_always_inline void
os_semaphore_wait(os_semaphore_t sema)
{
return _os_semaphore_wait(sema);
}
OS_NOTHROW
__header_always_inline void
os_semaphore_signal(os_semaphore_t sema)
{
return _os_semaphore_signal(sema);
}
__END_DECLS
OS_ASSUME_NONNULL_END
#endif // __OS_SEMAPHORE_PRIVATE__