0

首先,如果这个问题已经在这里,我很抱歉,但我的谷歌技能似乎让我失望了。

基本上,我有一个可以随时检查任何传入消息的功能。还有一个全局变量应该存储此消息。(我把这个函数放在一个线程中)

我想使用以下方式检查传入的消息:

while (global_array[0] != '#') { } // all messages are padded with '#'

可悲的是,这似乎不起作用。

我试着让这个 ' global_array' 不稳定,但它不会与我用于接收的 TCP 函数一起使用。

我真的只需要这个工作..请,任何帮助将不胜感激。

编辑:“似乎不起作用”->变量似乎没有改变,因为我陷入了这个循环

4

1 回答 1

3

在线程之间进行通信时,您需要某种形式的同步。制作一个变量volatile并不是表明该变量在不同线程之间使用的一种手段。它所做的只是防止编译器优化对这个变量的访问,但除非你告诉它,否则 CPU 不会开始从缓存以外的任何地方读取任何内存的内容。也就是说,使用volatile只会让你的代码变慢(是的,我知道在某些平台上编译器实现者选择volatile与多线程原语挂钩,但这样做通常被认为是一个坏主意)。

出于您描述的目的,您希望使用条件变量来保护对共享数据的访问:

  1. 读取线程锁定互斥锁,保护对您的并发访问,global_array并一直等待条件变量,直到有数据。
  2. 写入线程锁定互斥体,将数据放入其中,解锁互斥体,并向条件变量发出信号。

我认为Boost有一个封装了类似功能的类,并且我确信用于在不同线程之间进行通信的队列代码已发布到 Stackoverflow。在 Google 上搜索“线程通信队列”会产生大量链接以获取灵感。

于 2012-11-04T13:21:57.993 回答