Fix/Simplify the atomic.wait/nofity implementations (#2044)
Use the shared memory's shared_mem_lock to lock the whole atomic.wait and atomic.notify processes, and use it for os_cond_reltimedwait and os_cond_notify, so as to make the whole processes actual atomic operations: the original implementation accesses the wait address with shared_mem_lock and uses wait_node->wait_lock for os_cond_reltimedwait, which is not an atomic operation. And remove the unnecessary wait_map_lock and wait_lock, since the whole processes are already locked by shared_mem_lock.
This commit is contained in:
@ -121,7 +121,9 @@ os_thread_exit(void *retval);
|
||||
|
||||
#if defined(BH_HAS_STD_ATOMIC) && !defined(__cplusplus)
|
||||
#include <stdatomic.h>
|
||||
#define os_memory_order_acquire memory_order_acquire
|
||||
#define os_memory_order_release memory_order_release
|
||||
#define os_memory_order_seq_cst memory_order_seq_cst
|
||||
#define os_atomic_thread_fence atomic_thread_fence
|
||||
#endif
|
||||
|
||||
|
||||
@ -63,7 +63,9 @@ os_set_print_function(os_print_function_t pf);
|
||||
char *
|
||||
strcpy(char *dest, const char *src);
|
||||
|
||||
#define os_memory_order_acquire __ATOMIC_ACQUIRE
|
||||
#define os_memory_order_release __ATOMIC_RELEASE
|
||||
#define os_memory_order_seq_cst __ATOMIC_SEQ_CST
|
||||
#define os_atomic_thread_fence __atomic_thread_fence
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user