summaryrefslogtreecommitdiff
path: root/xmake/core/sandbox/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2025-08-27 23:27:52 +0800
committerruki <[email protected]>2025-08-28 11:35:54 +0800
commit46dd9ecf582e7d30d5ce7eb18f248506f85bbe21 (patch)
treecc8481903ed576f0d2b38db7f89f55db25706050 /xmake/core/sandbox/modules
parent6809e2d887d3f3f298b4e324a7580c55ac47562d (diff)
add mutex to thread
Diffstat (limited to 'xmake/core/sandbox/modules')
-rw-r--r--xmake/core/sandbox/modules/import/core/base/thread.lua47
1 files changed, 47 insertions, 0 deletions
diff --git a/xmake/core/sandbox/modules/import/core/base/thread.lua b/xmake/core/sandbox/modules/import/core/base/thread.lua
index f56466ddf..3c4bfa6d5 100644
--- a/xmake/core/sandbox/modules/import/core/base/thread.lua
+++ b/xmake/core/sandbox/modules/import/core/base/thread.lua
@@ -27,6 +27,7 @@ local raise = require("sandbox/modules/raise")
-- define module
local sandbox_core_base_thread = sandbox_core_base_thread or {}
local sandbox_core_base_thread_instance = sandbox_core_base_thread_instance or {}
+local sandbox_core_base_thread_mutex = sandbox_core_base_thread_mutex or {}
-- export the thread status
sandbox_core_base_thread.STATUS_READY = thread.STATUS_READY
@@ -84,6 +85,30 @@ function sandbox_core_base_thread_instance.wait(instance, timeout)
end
end
+-- lock mutex
+function sandbox_core_base_thread_mutex.lock(mutex)
+ local ok, errors = mutex:_lock()
+ if not ok then
+ raise(errors)
+ end
+end
+
+-- unlock mutex
+function sandbox_core_base_thread_mutex.unlock(mutex)
+ local ok, errors = mutex:_unlock()
+ if not ok then
+ raise(errors)
+ end
+end
+
+-- close mutex
+function sandbox_core_base_thread_mutex.close(mutex)
+ local ok, errors = mutex:_close()
+ if not ok then
+ raise(errors)
+ end
+end
+
-- new thread
function sandbox_core_base_thread.new(callback, opt)
local instance, errors = thread.new(callback, opt)
@@ -117,6 +142,28 @@ function sandbox_core_base_thread.running()
return instance
end
+-- open a mutex
+function sandbox_core_base_thread.mutex(name)
+ local mutex, errors = thread.mutex(name)
+ if not mutex then
+ raise(errors)
+ end
+
+ -- hook filemutex interfaces
+ local hooked = {}
+ for name, func in pairs(sandbox_core_base_thread_mutex) do
+ if not name:startswith("_") and type(func) == "function" then
+ hooked["_" .. name] = mutex["_" .. name] or mutex[name]
+ hooked[name] = func
+ end
+ end
+ for name, func in pairs(hooked) do
+ mutex[name] = func
+ end
+ return mutex
+end
+
+
-- return module
return sandbox_core_base_thread