从线程访问静态volatile变量

时间:2014-07-08 07:47:06

标签: c++ multithreading qt volatile

我有一个声明了静态不稳定QHash的类

class Sample
{
    volatile static QHash <string, int> myDict;
}

我正在使用一个类来覆盖QThread的run()方法

class MyThread : public QThread
{
public:
    void run()
    {
        string s = "hello";
        if(Sample::myDict.contains(s)){std::cout << "i contain "<< s;}
    }
}

但这样做会给我一个编译错误:

passing 'volatile QHash<std::string, int>' as 'this' argument of 'bool QHash<Key, T>::contains(const Key&) const [with Key = std::string; T = int]' discards qualifiers [-fpermissive]

所以我检查了堆栈溢出。似乎将volatile变量传递给函数会使编译器发出警告,因为编译器可以对该变量进行线程不安全的优化。但在我的情况下,编译器给出错误而不是警告。此外,这里的易变QHash似乎是函数“QHash :: contains”的隐式参数。 有帮助吗?

0 个答案:

没有答案