diff options
| author | ruki <[email protected]> | 2025-08-27 23:27:52 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:54 +0800 |
| commit | 46dd9ecf582e7d30d5ce7eb18f248506f85bbe21 (patch) | |
| tree | cc8481903ed576f0d2b38db7f89f55db25706050 /core/src | |
| parent | 6809e2d887d3f3f298b4e324a7580c55ac47562d (diff) | |
add mutex to thread
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/engine.c | 22 | ||||
| -rw-r--r-- | core/src/xmake/thread/mutex_trylock.c | 49 |
2 files changed, 61 insertions, 10 deletions
diff --git a/core/src/xmake/engine.c b/core/src/xmake/engine.c index 2540dff07..1c5bc1a79 100644 --- a/core/src/xmake/engine.c +++ b/core/src/xmake/engine.c @@ -350,6 +350,7 @@ tb_int_t xm_thread_resume(lua_State* lua); tb_int_t xm_thread_mutex_init(lua_State* lua); tb_int_t xm_thread_mutex_exit(lua_State* lua); tb_int_t xm_thread_mutex_lock(lua_State* lua); +tb_int_t xm_thread_mutex_trylock(lua_State* lua); tb_int_t xm_thread_mutex_unlock(lua_State* lua); // open cjson @@ -641,16 +642,17 @@ static luaL_Reg const g_utils_functions[] = // the thread functions static luaL_Reg const g_thread_functions[] = { - { "thread_init", xm_thread_init } -, { "thread_exit", xm_thread_exit } -, { "thread_wait", xm_thread_wait } -, { "thread_resume", xm_thread_resume } -, { "thread_suspend", xm_thread_suspend } -, { "mutex_init", xm_thread_mutex_init } -, { "mutex_exit", xm_thread_mutex_exit } -, { "mutex_lock", xm_thread_mutex_lock } -, { "mutex_unlock", xm_thread_mutex_unlock } -, { tb_null, tb_null } + { "thread_init", xm_thread_init } +, { "thread_exit", xm_thread_exit } +, { "thread_wait", xm_thread_wait } +, { "thread_resume", xm_thread_resume } +, { "thread_suspend", xm_thread_suspend } +, { "mutex_init", xm_thread_mutex_init } +, { "mutex_exit", xm_thread_mutex_exit } +, { "mutex_lock", xm_thread_mutex_lock } +, { "mutex_trylock", xm_thread_mutex_trylock } +, { "mutex_unlock", xm_thread_mutex_unlock } +, { tb_null, tb_null } }; // the lua global instance for signal handler diff --git a/core/src/xmake/thread/mutex_trylock.c b/core/src/xmake/thread/mutex_trylock.c new file mode 100644 index 000000000..3c884b40c --- /dev/null +++ b/core/src/xmake/thread/mutex_trylock.c @@ -0,0 +1,49 @@ +/*!A cross-platform build utility based on Lua + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Copyright (C) 2015-present, Xmake Open Source Community. + * + * @author ruki + * @file thread_mutex_trylock.c + * + */ + +/* ////////////////////////////////////////////////////////////////////////////////////// + * trace + */ +#define TB_TRACE_MODULE_NAME "thread_mutex" +#define TB_TRACE_MODULE_DEBUG (0) + +/* ////////////////////////////////////////////////////////////////////////////////////// + * includes + */ +#include "prefix.h" + +/* ////////////////////////////////////////////////////////////////////////////////////// + * implementation + */ +tb_int_t xm_thread_mutex_trylock(lua_State* lua) +{ + tb_assert_and_check_return_val(lua, 0); + + if (!xm_lua_ispointer(lua, 1)) + return 0; + + xm_thread_mutex_t* thread_mutex = (xm_thread_mutex_t*)xm_lua_topointer(lua, 1); + tb_check_return_val(thread_mutex && thread_mutex->handle, 0); + + lua_pushboolean(lua, tb_mutex_enter_try(thread_mutex->handle)); + return 1; +} + |
