计时器是否需要互斥锁

时间:2012-10-18 00:15:41

标签: multithreading timer mutex

我在程序中使用计时器:
timer = new Qtimer(); connect(timer, SIGNAL(timeout()), this, SLOT(readData())); timer.start(1000);
并且还有其他可以由UI交互触发的插槽:
/*SLOT FUNCTION*/ on_pushbutton_triggered(){..../*write data*/...}

(代码用qt编写,但我认为这是一个常见的问题)

所以我担心潜在的问题:可能readData()读取错误数据而on_pushbutton_triggereed()正在写入数据?

我对计时器在屏幕后面的工作方式不太熟悉:它与我的程序在同一个帖子中吗? 将readData()和on_pushbutton_triggereed()调用,执行,串行完成并且没有互斥问题(即:我必须使用lock()和unlock())?感谢您的阅读!我真的希望你的提示!

1 个答案:

答案 0 :(得分:1)

Qt正在使用event loop来实现一般的并发活动,特别是在单个线程中使用QTimer。 事件提供程序(在本例中为QTimer)正在生成事件并将它们发布到事件循环中。然后根据它们的优先级和发布顺序对它们进行处理。这种方法不需要任何同步,因为当时只执行一段代码,因此访问数据是安全的。

在类Unix系统上ps -eLf命令将显示有关所有进程(输出中的PID列)及其线程(LWP列)的信息。 NLWP列显示特定进程有多少个线程。