多线程进程之间共享全局变量需要加锁吗

多线程进程之间共享全局变量需要加锁吗,第1张

一般来说需要加锁。如过你的程序允许“脏读”也可以不加锁。所谓“脏读”是指一个线程正在修改共享变量,在没有完成修改情况,另一个线程读取了该变量,这时,获取的不是被修改共享变量的最终值。

你所说的父线程是指 A线程在方法中开启了B线程,A为B的父吧?
你可以理解为,A在开启B以后,A和B就是两个独立的线程了,访问同一个变量存在不同步的风险,那么显然如果有需要,是要在访问这个变量的方法中加锁的

一般来说一个设备只有一个显示屏,所以,即便是多线程情况也要加锁同步线程。先不考虑LVGL,CPU/单片机等只通过一条总线(SPI,8080等)驱动显示器,所以即便只考虑硬件总线也是不允许多线程并行的。因为只有一个总线,连线程切换也是不允许的,当上个线程正在通过总线给屏幕传输数据时,突然发生线程切换,换另一个线程打断传输过程,并传输自己的数据,此时屏幕上显示内容肯定会出问题。
回到LVGL,大量使用static或全局变量,是为了保证对象指针你还能找到,,,而且LVGL渲染是单线程的,虽然你可以通过多线程修改某几个对象,但是你只是修改了整个对象树的内存结构,LVGL要到下一个周期才会去渲染你改好的对象树,而且运行LVGL事件的只是一个线程,所以渲染过程是单线程的。
LVGL要维持一个线程(任务)和一个周期时钟来触发和处理各种事件,哪怕单片机中也一样


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/13383378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-31
下一篇2025-08-31

发表评论

登录后才能评论

评论列表(0条)

    保存