Skip to content

Commit 1eb33e9

Browse files
committed
docs(sync): 添加线程安全部分文档.
更新版本号至 0.0.3
1 parent 293ecbb commit 1eb33e9

5 files changed

Lines changed: 50 additions & 2 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "openex"
3-
version = "0.0.2"
3+
version = "0.0.3"
44
edition = "2024"
55

66
[dependencies]

docs/.vitepress/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export default defineConfig({
3030
{text: '判断语句', link: '/example/conditional'},
3131
{text: '循环语句', link: '/example/loop'},
3232
{text: '变量', link: '/example/value'},
33+
{text: '线程安全', link: '/example/sync'},
3334
]
3435
},
3536
{

docs/example/function.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ function native no_impl_native();
9898
```
9999
:::
100100

101+
## 同步函数
102+
103+
* 详见 [线程安全 - 函数](/example/sync#函数安全)
104+
101105
## 函数返回
102106

103107
在 OpenEX 中, 使用 `return` 关键字定义一个返回语句.

docs/example/sync.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# 线程安全
2+
3+
OpenEX 支持多线程运行脚本与脚本内的方法,
4+
故解释器内会具备一些安全措施用于保证多线程环境下脚本的执行符合预期.
5+
6+
## 函数安全
7+
8+
OpenEX 支持使用 `sync` 关键字来修饰一个函数, 其会避免多个线程同时执行该函数.
9+
10+
```js
11+
function sync safe_func() {
12+
// 函数实现
13+
}
14+
```
15+
16+
::: warning 递归问题
17+
18+
不建议在被 `sync` 关键字修饰的函数使用递归调用, 这会导致较为复杂的同步处理.
19+
20+
> 虽然 OpenEX 解释器支持 `sync` 函数重入
21+
22+
:::
23+
24+
::: danger 死锁问题
25+
26+
OpenEX 不会检查复杂的递归调用是否会发生潜在的死锁问题, 所以您应该避免以下写法.
27+
28+
```js
29+
function sync example_sync_1() {
30+
this.example_sync_2();
31+
}
32+
33+
function sync example_sync_2() {
34+
this.example_sync_1();
35+
}
36+
```
37+
38+
这会导致解释器当前线程直接发生死锁, 重入功能仅处理函数自递归调用.
39+
40+
:::
41+
42+
以及 `native` 关键字与 `sync` 关键字不能同时出现在一条函数定义上, \
43+
有关于本地方法的线程安全措施由解释器或依赖库内部实现安全.

0 commit comments

Comments
 (0)