繁体   English   中英

线程共享C ++中的数据

[英]Threads sharing data in C++

我有一个GUI线程,需要其他线程(IO线程)的信息。 IO线程所做的所有事情都是从串行端口获取信息。 Gui Thread所做的所有工作都是读取获取的信息并将其显示在表中。

我在想,也许IO线程应该将数据放在由互斥锁保护的全局结构中,然后GUI线程应该从该结构中读取数据。 是否有更好的实施方案? 在这种情况下,使用临界区是否比互斥锁更好?

现在,我知道我将收到答复,说明您为什么不也仅使用GUI线程来获取IO数据,所以我不需要多线程。 是的,我知道我只是想举一个简单的例子来学习最佳实践:)

谢谢!

一种方法是让您的IO线程将输入数据发布到GUI。 每当您在IO线程上接收到数据时,就将其打包在堆上的结构中,并将自定义消息连同该结构的地址一起发回GUI线程。 IOW是先创建GUI线程,然后是IO线程,将GUI线程的句柄传递给IO线程,以用于将数据发送回GUI。 这样,您就不必关心互斥/关键部分,但是您可以使用现有的GUI消息队列,也可以根据您的项目应该在哪种环境中运行来创建自己的GUI消息队列。

我建议的是同一结构的两个不同实例。 当您的IO线程准备好要更新GUI线程时,它将获取一个互斥锁,将其结构复制到GUI线程的结构中,解锁该互斥锁,并通知GUI线程它应读取该结构的更新副本。

至于关键部分,仅指的是一次只能执行一个代码段的概念。 主要是因为否则您可能会获得不一致的状态。 创建关键部分的方法是使用锁定互斥锁和解锁互斥锁对其进行门控。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM