mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-15 17:30:53 +08:00
72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
#ifndef FIBER_EVENT_INCLUDE_H
|
|
#define FIBER_EVENT_INCLUDE_H
|
|
|
|
#include "fiber_define.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* fiber_event.c */
|
|
|
|
/**
|
|
* Fiber event mutex object based on IO event, which is thread safety. That's
|
|
* to say one event object can used in different threads
|
|
*/
|
|
typedef struct ACL_FIBER_EVENT ACL_FIBER_EVENT;
|
|
|
|
/**
|
|
* When the fiber_event is used in multiple threads for sync, if there're
|
|
* many threads, the flag FIBER_FLAG_USE_MUTEX should be set to avoid internal
|
|
* thundering herd which maybe happen by using atomic; if the threads' number
|
|
* is less than one hundred, the flag FIBER_FLAG_USE_MUTEX needn't be set
|
|
*/
|
|
#define FIBER_FLAG_USE_MUTEX (1 << 0)
|
|
|
|
/**
|
|
* If this flag is set, msg_fatal will be used other msg_error when error
|
|
* happened, this flag is optional for users
|
|
*/
|
|
#define FIBER_FLAG_USE_FATAL (1 << 1)
|
|
|
|
/**
|
|
* Create fiber event mutex which can be used in fibers mode or threads mode
|
|
* @param flag {unsigned} define as FIBER_FLAG_XXX above
|
|
* @return {ACL_FIBER_EVENT *}
|
|
*/
|
|
FIBER_API ACL_FIBER_EVENT *acl_fiber_event_create(unsigned flag);
|
|
|
|
/**
|
|
* Free event mutex returned by acl_fiber_event_create
|
|
* @param {ACL_FIBER_EVENT *}
|
|
*/
|
|
FIBER_API void acl_fiber_event_free(ACL_FIBER_EVENT *event);
|
|
|
|
/**
|
|
* Wait for event can be available
|
|
* @param {ACL_FIBER_EVENT *}
|
|
* @return {int} 0 returned if successful, or -1 if error happened
|
|
*/
|
|
FIBER_API int acl_fiber_event_wait(ACL_FIBER_EVENT *event);
|
|
|
|
/**
|
|
* Try to wait for event can be available
|
|
* @param {ACL_FIBER_EVENT *}
|
|
* @return {int} 0 returned if successful, or -1 if the event been locked
|
|
*/
|
|
FIBER_API int acl_fiber_event_trywait(ACL_FIBER_EVENT *event);
|
|
|
|
/**
|
|
* The event's owner notify the waiters that the event mutex can be available,
|
|
* and the waiter will get the event mutex
|
|
* @param {ACL_FIBER_EVENT *}
|
|
* @return {int} 0 returned if successful, or -1 if error happened
|
|
*/
|
|
FIBER_API int acl_fiber_event_notify(ACL_FIBER_EVENT *event);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|