|
|
@@ -1,8 +1,8 @@
|
|
|
# 线程安全版本的`rt_kprintf()`
|
|
|
|
|
|
-原版RT-Thread `kserver.c `文件中的`rt_kprintf()`函数是线程不安全的,如果同时有两个线程同时使用`rt_kprintf()`打印数据,可能会导致数据被冲刷掉或者一方的信息根本没有打印出来等一系列奇奇怪怪的问题。比如:https://club.rt-thread.org/ask/question/429525.html
|
|
|
+原版RT-Thread `kserver.c `文件中的`rt_kprintf()`函数是线程不安全的,这是因为按照ISO C标准,`printf`本身就是线程不安全的。此外,`rt_kprintf` 希望减少过多的依赖,做到简单,以保证在任何环境下都可以正常使用。
|
|
|
|
|
|
-RT-Thread官方清楚非线程安全所带来的后果,但是为了确保`rt_kprintf()`函数与标准C库的`printf`函数标准一致以及足够精炼有意而为之。
|
|
|
+因此,如果同时有两个线程同时使用`rt_kprintf()`打印数据,可能会导致数据被冲刷掉或者一方的信息根本没有打印出来等一系列奇奇怪怪的问题。比如:https://club.rt-thread.org/ask/question/429525.html
|
|
|
|
|
|
本安全版本`rt_kprintf()`函数会自动判断当前所处环境:
|
|
|
|
|
|
@@ -22,8 +22,8 @@ RT-Thread官方清楚非线程安全所带来的后果,但是为了确保`rt_k
|
|
|
|
|
|
|
|
|
## 适用版本
|
|
|
-- 4.0.4版本以上**无需屏蔽原版`rt_kprintf`**,因为原版`rt_kprintf`为弱函数,本软件包会自动覆盖原版`rt_kprintf`。
|
|
|
-- 4.0.4以下版本需要手动注释掉原版`rt_kprintf`函数
|
|
|
+- 4.0.4版本以上**无需屏蔽** `kservice.c` 内的 `rt_kprintf`**,因为其弱函数,本软件包会自动覆盖原版`rt_kprintf`。
|
|
|
+- 4.0.4以下版本需要手动注释掉 `kservice.c` 内的 `rt_kprintf`函数。
|
|
|
|
|
|
|
|
|
## 如何添加该软件包
|
|
|
@@ -31,8 +31,9 @@ RT-Thread官方清楚非线程安全所带来的后果,但是为了确保`rt_k
|
|
|
```
|
|
|
RT-Thread online packages
|
|
|
system packages --->
|
|
|
- [*] rt_kprintf_threadsafe: thread-safe version of rt_kprintf --->
|
|
|
- Version (latest) --->
|
|
|
+ [*] rt_kprintf: enhanced rt_kprintf packages
|
|
|
+ [*] rt_kprintf_threadsafe: thread-safe version of rt_kprintf --->
|
|
|
+ Version (latest) --->
|
|
|
```
|
|
|
|
|
|
|